允许本地构建的快照覆盖更新的远程快照

Pau*_*son 18 maven-2

我们有一个大型的多模块maven项目.为了提高开发效率,我们最近开始将快照部署到远程存储库(通过中央构建),并引入了maven配置文件,这意味着用户只需要签出并构建模块子集并为其余部分创建快照.我们还将远程存储库的更新策略设置为"never",以确保在我们想要更新本地快照时它是明确的.因此,典型的命令是; mvn -Pref -U清理安装.

现在,在maven反应器中,配置文件中定义的模块的构建工作完美,maven使用快照来实现其依赖关系,包括从远程存储库下载任何更新的模块(重要说明;为了确保我们拥有一致的快照集,我们的中央部署是来自我们项目的所有模块快照,即使其中只有一些已更改).

问题似乎是当maven然后将依赖关系从配置文件外部的模块解析为本地构建的模块时 - 如果自构建此类模块以来已远程部署快照,则maven将此视为更新版本并继续下载并覆盖本地构建的快照.这可能导致其他模块期望本地更改模块的中断.

基本上我想在我的配置文件中的任何模块中通过任何远程快照选择"使用本地构建的快照",即使时间戳指示远程快照更新.

在这种情况下,其他人做了什么?

谢谢,

保罗

Duc*_*ppy 7

如果你可以更新到Maven 3,你可以使用--no-snapshot-updates命令行开关(-nsu也可以保存输入).该选项的错误已在3.0.4中修复,因此请确保您使用的是最新版本.

您也可以尝试脱机模式,但这将停止所有更新检查,直到您停止"脱机".首先,进行构建以确保将所有依赖项下载到本地存储库.然后,您可以通过添加<offline>true</offline>到settings.xml(并false在准备好再次开始检查更新时将其切换到)或在执行构建时使用-o--offline命令行开关进入离线模式.这适用于Maven 2或3.


Xup*_* MV 0

哪些工件必须更新、哪些不能更新的问题不仅对于 Maven 来说是一个非常困难的问题,对于用户来说也是如此。Maven 不是 AI。我认为您可以在离线模式下构建项目以避免下载工件(但是,当然,您想要更新的工件将不会更新)。

三年前,我们尝试通过以下方式解决这个问题:构建(您的中央构建)必须仅包含版本(无快照)。在那里 - 您可以确定,如果您构建项目 - 相同的代码是稳定的。如果您更改某些工件,您将创建模块快照,并且在工作完成后,您将创建版本并更新依赖项。但是,这会导致另一个问题:如果您没有大型自动测试系统,您可能会花费大量时间来创建版本(bug -> 修复 -> 版本 -> bug -> 修复 -> 版本 -> 等.)。

今天,我在一个小团队中工作,如果有人更新了他的部分,他只是这么说,每个想要更新的人都接受它,而不想更新的人则不要接受。

我不是此类问题的专家。因此,我很高兴听到更简单的方法来避免这个问题。