是否可以在不运行默认生命周期阶段的情况下强制更新项目?

时间:2014-08-11 22:15:23

标签: java maven maven-release-plugin

我还没有找到关于究竟是什么触发强制更新的文档,而且我已经看到它的行为会有所不同,具体取决于运行哪个生命周期阶段。这导致我得出结论,尽管如果你试图强制更新(使用-U)并且如果它不需要则忽略强制更新,maven当然关心你正在运行哪个阶段。

即使我没有直接运行默认生命周期阶段,我也想强制更新。我的用例是使用带有时间戳的快照版本发布我的应用程序:

mvn clean release:perform release:prepare -U

我看到即使快照是版本化的,内部也会在其本地仓库中获得最新的SNAPSHOT版本。如果我先运行mvn compile -U,那么我的快照会更新,并且发布会按预期发生。

我很好奇为什么时间戳版本不会用于从nexus中提取新工件,但我认为它与更狭隘的发布插件有关,而不是与maven本身有关。

由于我接受了使用release-plugin的失败,有没有办法强制更新而不运行单独的(和不必要的)生命周期阶段。或者在构建项目时传递-U以由maven发布插件运行的方法?

2 个答案:

答案 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,但在这种情况下,您需要自己进行标记等。