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

Java 是否可以在不运行默认生命周期阶段的情况下强制更新项目?,java,maven,maven-release-plugin,Java,Maven,Maven Release Plugin,我还没有找到关于触发强制更新的确切原因的文档,我已经看到,根据运行的生命周期阶段,强制更新的行为会有所不同。这让我得出了一个结论,尽管maven当然关心如果您尝试强制更新(使用-U)将运行哪个阶段,如果不需要,则忽略强制更新 我想强制更新,即使我没有直接运行默认的生命周期阶段。我的用例是使用以下命令发布带有时间戳快照版本的应用程序: mvn clean release:perform release:prepare -U 我看到,即使快照已版本化,但在内部,它在其本地repo中获得了最新的快照

我还没有找到关于触发强制更新的确切原因的文档,我已经看到,根据运行的生命周期阶段,强制更新的行为会有所不同。这让我得出了一个结论,尽管maven当然关心如果您尝试强制更新(使用-U)将运行哪个阶段,如果不需要,则忽略强制更新

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

mvn clean release:perform release:prepare -U
我看到,即使快照已版本化,但在内部,它在其本地repo中获得了最新的快照版本。如果我首先运行
mvncile-U
,那么我的快照就会更新,发布也会按预期进行

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


既然我接受了发布插件的失败,那么有没有一种方法可以在不运行单独的(不必要的)生命周期阶段的情况下强制更新呢。或者,在构建我的项目时,传递maven release插件将运行的-U的方法?

首先,如果您仍然想这样做,请不要让
release
候选者依赖
快照

mvn dependency:resolve -U

首先,你混合了不同的概念。您的电话是:

mvn release:prepare...
这并不是一个矛盾的开始,它运行的发布插件有其特定的目标,当然还有
。。发布:执行
运行目标

此外,发布插件使用创建的发布(标记状态)启动子进程(在子文件夹target/checkout中启动maven),该发布通常不会将-U选项转移到此子进程。这可以通过使用“mvn-Darguments=“…””来实现

但是,如果您想在构建过程中强制更新快照,您可以简单地使用
mvn-U..
like:

mvn -U clean package 
这意味着简单地让maven检查Nexus是否有更新的快照(如果有),将它们下载到本地存储库,而不是等到更新快照的时间到了(请参阅)


如果您想在不使用maven release插件的情况下更改构建中的版本,您可以查看,但在这种情况下,您需要自己进行标记等操作。

这可能是我们继续讨论的内容,因为解析的依赖项的输出可能很有用,我希望仍然有一种方法可以更新快照,而不需要我做额外的处理。很好地介绍了快照并解释了我们的用例,我们仍在积极开发我们的应用程序,并在每个2周迭代结束时执行这些发布。我们有许多模块依赖项,作为这项工作的一部分,这些模块依赖项也在积极开发中。一旦我们发布了第一个官方版本,我们将发布所有依赖项以及应用程序本身。但是为什么发布插件不把时间戳版本拉下来(就好像它是发布版本一样)?相反,我需要在本地更新所有快照,以便使用正确的时间戳版本。呸,我无法编辑上面的评论。这一定是maven的问题,因为在发布插件中,我肯定会使用maven内部构件来解决依赖关系。而且通过参数(-Darguments=“-U”)传入的-U选项看起来非常有效。我本以为我试过了,但很明显我错过了它的作用。