如何使用远程存储库中的新工件更新maven本地存储库?

时间:2010-04-06 03:48:02

标签: maven dependencies

我的maven模块A依赖于其他人提供的另一个maven模块B.当我第一次在A下运行“mvn install”时,maven将B-1.0.jar从远程存储库下载到我的本地maven存储库。我的模块A构建良好。

与此同时,其他人正在将更新的B-1.0.jar部署到远程存储库。当我再次在A下运行“mvn install”时,maven不会将较新的B-1.0.jar从远程存储库下载到我的本地存储库。因此,由于B-1.0.jar中的API更改,我的模块A构建失败。

我可以从本地存储库中手动删除B-1.0.jar。然后当我运行“mvn install”时,maven会从远程存储库下载最新的B-1.0.jar。

我的问题是如何自动让maven从远程存储库下载最新的工件。我试图将updatePolicy设置为“always”。但这并没有成功。

2 个答案:

答案 0 :(得分:28)

Maven永远不会重新下载版本 - 1.0被认为是最终版本,新版本应该使用新版本。

如果模块B仍在开发中,则应使用版本1.0-SNAPSHOT - 快照是一个特殊的Maven版本,它将检查更新,并在部署时存储时间戳和内部版本号以进行跟踪。

答案 1 :(得分:2)

我同意上面的Brett:新版本应该使用新版本。对于您的情况,快照可能是最佳解决方案,但其他可能也有帮助的方法是使用dependency version ranges

因此,您可以指定版本 (1.0,)
声明您接受任何大于1.0的版本 或
[1.1.1,1.1.7]
接受(包括)版本1.1.1和1.1.7之间的任何内容 符号遵循标准数学区间语法

[=包含在间隔中 (=从区间中排除

(在学校里,我总是把方括号视为“持有”那个元素,而更柔和的括号“让它去”)

在依赖性仍处于频繁开发状态且您不希望依赖可能不太稳定且更有可能破坏代码的新快照的情况下,这可能会有所帮助。您可以指定安全范围并根据需要随时向上或向下调整边界