我还没有找到关于究竟是什么触发强制更新的文档,而且我已经看到它的行为会有所不同,具体取决于运行哪个生命周期阶段。这导致我得出结论,尽管如果你试图强制更新(使用-U)并且如果它不需要则忽略强制更新,maven当然关心你正在运行哪个阶段。
即使我没有直接运行默认生命周期阶段,我也想强制更新。我的用例是使用带有时间戳的快照版本发布我的应用程序:
mvn clean release:perform release:prepare -U
我看到即使快照是版本化的,内部也会在其本地仓库中获得最新的SNAPSHOT版本。如果我先运行mvn compile -U
,那么我的快照会更新,并且发布会按预期发生。
我很好奇为什么时间戳版本不会用于从nexus中提取新工件,但我认为它与更狭隘的发布插件有关,而不是与maven本身有关。
由于我接受了使用release-plugin的失败,有没有办法强制更新而不运行单独的(和不必要的)生命周期阶段。或者在构建项目时传递-U以由maven发布插件运行的方法?
答案 0 :(得分:1)
首先不要让release
候选人依赖SNAPSHOTS
,如果你还想这样做的话
mvn dependency:resolve -U
答案 1 :(得分:1)
首先,你要混合不同的概念。你在打电话:
mvn release:prepare...
并没有启动life cycle,因为它运行发布插件并且具有特定目标prepare
,当然.. release:perform
会运行目标perform
。
此外,发布插件使用创建的版本(标记状态)启动子进程(在子文件夹目标/结帐中启动maven),通常不将-U选项传输到此子进程。这可以通过使用`mvn -Darguments =“...”'来完成。
但是如果你想在构建期间强制更新快照,你可以简单地使用mvn -U...
,如:
mvn -U clean package
这意味着简单的让Nexus中的maven检查有更新的SNAPSHOT,如果是将它们下载到本地存储库而不是等到更新SNAPSHOT的时间到了(参见updatePolicy)。
如果您想在没有maven-release-plugin的情况下更改版本中的版本,可以查看versions-maven-plugin,但在这种情况下,您需要自己进行标记等。