处理Maven快照 - 最佳实践

时间:2011-02-04 11:08:13

标签: maven-2 maven snapshot repository

我不是长枪而已,但我会感激一些帮助。

情况如下:

我在使用Maven 2的大型分布式开发团队中工作。我们有一个Nexus存储库,但它只保存版本,而不是快照。

问题是双重的:

  1. 每天早上我都要把自己没有工作的其他模块搞定,然后构建它们然后构建我的模块。这是因为我的模块对这些其他模块具有快照依赖性。这需要时间并且真正加起来,因为每个人都需要这样做才能保持最新状态。

  2. 假设模块A需要模块B并被声明为快照依赖项。模块B更新为更高版本号,但开发人员忘记更新模块A pom。所以模块A正在使用较旧的快照,并且可能暂时无法识别,可能只是在它的发布时间。

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

3 个答案:

答案 0 :(得分:6)

  

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

这就是问题所在。在您的nexus中创建一个Snapshot存储库。只要发布存储库和快照存储库之间存在清晰的分离,就没有理由不将快照部署到nexus(我通常通过Hudson作业完成它,因此每当Hudson作业成功时,repo中总会有当前版本。)

答案 1 :(得分:1)

如果您不想依赖特殊(快照)版本(问题的第2点),您应该考虑在您的家属声明中使用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>

小心,我认为对于SNAPSHOTs(范围内的考虑)的处理在maven 2和maven 3之间有所不同。

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

答案 2 :(得分:0)

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