2010-04-06 99 views
11

我的maven模块A依赖于其他人提供的另一个maven模块B.当我第一次在A下运行“mvn install”时,maven从远程仓库下载B-1.0.jar到我的本地Maven仓库。我的模块A建立良好。如何使用远程存储库中的较新工件更新maven本地存储库?

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

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

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

回答

27

Maven从未重新下载发布 - 1.0被认为是最终版本,新版本应该使用新版本。

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

+1

这是非常有帮助的。 SNAPSHOT仅用于此目的。 – Richard 2010-04-07 21:42:52

+0

感谢Brett的回答:) – pranay 2012-05-28 11:12:43

2

我同意上面的Brett:新版本应该使用新版本。对于你的情况,快照可能是最好的解决方案,但其他可能有用的东西是使用dependency version ranges

因此你可以指定一个版本的
(1.0,)
说明你接受任何版本大于1.0。

[1.1.1,1.1.7]
接受(包括)版本1.1.1和1.1.7之间的任何内容。
记号如下标准数学间隔语法,其中

[=列入间隔
(=从区间排除

(在学校,我一直以为方括号的为“保持”,在该元件,而较柔和的括号“让它离开”)

这对于您的依赖关系仍处于频繁开发阶段并且您不想依赖可能不太稳定且更有可能中断的新快照您的代码,您可以指定安全范围并向上或向下调整边界,如适当,随着时间的推移

相关问题