2

我绝对不是专家,但我会很感激一些帮助。

情况如下:

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

问题有两个方面:

  1. 每天早上我都必须 svn 启动我不使用的其他模块,构建它们,然后构建我的模块。这是因为我的模块对这些其他模块具有快照依赖关系。这需要时间并且确实加起来,因为每个人都需要这样做才能保持最新状态。

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

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

4

3 回答 3

6

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

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

于 2011-02-04T11:13:12.693 回答
1

如果您不想依赖特殊(快照)版本(问题的第 2 点),您应该考虑在您的依赖声明中使用版本范围:

来自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 对 SNAPSHOT 的处理(范围内的考虑)不同。

如果您不想将 SNAPSHOTS 部署到您的 NEXUS 存储库(这将是最好的方式),您必须自己构建 SNAPSHOTS,因为您已经这样做了。也许脚本或像jenkins这样的持续构建工具(易于使用 - 甚至在您的本地机器上)可以帮助您。

于 2011-02-04T12:25:20.280 回答
0

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

于 2011-02-04T11:31:13.067 回答