处理Maven快照 - 最佳实践

问题描述:

我不是maven guru,但我希望得到一些帮助。处理Maven快照 - 最佳实践

这里的情况:

我在使用Maven 2.我们有一台Nexus仓库,但它仅持有的版本,而不是快照大型分布式开发团队的工作。

的问题是2倍:

  1. 我每天早晨都使用svn了其他模块,我不下工夫,建立他们,然后建立我的模块

    。这是因为我的模块对这些其他模块具有快照依赖性。这需要时间,并且真正加起来,因为每个人都需要这样做才能保持最新状态。

  2. 说模块A需要模块B并被声明为快照依赖。模块B更新到更高的版本号,但开发人员忘记更新模块A pom。所以模块A正在使用一个较老的快速启动,它可能不会被识别一段时间,可能只有当它发布的时候。

那么如何最好地处理这些问题呢?

+0

你实际上提出了两个问题,所以很难选择一个答案。我建议分两个问题。 – 2011-02-04 11:30:24

我在一个大的工作,分配使用Maven 2.我们 有一台Nexus仓库,但它只 持有的版本中,没有快照 开发团队。

这就是问题所在。在你的联系中创建一个快照存储库。只要发行版仓库和快照仓库之间存在干净的分离,就没有理由不将快照部署到联结(我通常通过哈德森作业来完成),所以当哈德森作业成功时,仓库中始终存在最新版本)

+0

他们说他们不想在存储库中放入快照。 – FinalFive 2011-02-04 11:45:18

+3

@FinalFive他们错了。这是[单独的`](http://maven.apache.org/pom。html#Repository) – 2011-02-04 12:04:32

+0

我同意(作为Maven Dev和Nexus Dev)。 Nexus和Maven有意实施快照分离,所以没有理由不在回购协议中。 – 2011-02-07 15:01:03

maven-versions-plugin有一个display-dependency-updates mojo,你可以用它来查明你是否没有使用最新版本的工件。

如果你不想依赖于特殊的(快照)版本(你的问题的第2点),你应该考虑在你的dependecy声明中使用version ranges

样品从Maven Complete Reference Book

的JUnit版本大于或等于3.8,但小于4.0

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>[3.8,4.0)</version> 
    <scope>test</scope> 
</dependency> 

要小心,我觉得快照的处理(在考虑范围内)在maven 2和maven 3之间是不同的。

如果你不想将SNAPSHOTS部署到你的NEXUS存储库(这将是最好的方式),你必须自己构建SNAPSHOTS。也许脚本或连续编译工具如jenkins(易于使用 - 即使在本地计算机上)也可以帮助您。