首页 > 解决方案 > 从命令行覆盖父 POM 中定义的 Maven 发布目标

问题描述

我需要运行替代发布目标,而不是deploy作为release:perform. 我们全公司的父 POM 定义如下pluginManagement

    <plugin>
      <artifactId>maven-release-plugin</artifactId>
      <version>2.4.1</version>
      <configuration>
        <releaseProfiles>release</releaseProfiles>
        <goals>deploy</goals>
      </configuration>
    </plugin>

我试图覆盖这个 using-Dgoals选项,但 maven 忽略了这个并运行deploy. 我也尝试过设置-DuseReleaseProfile=false和更改-DreleaseProfiles,但它们似乎都没有产生任何影响。我无法更改项目 POM,因为我需要执行 CI 框架的这一部分以及任意项目。我能够覆盖不使用上述父 POM 的测试项目,所以似乎问题在于覆盖来自父 POM 的内容。我可以在这里使用其他选项吗?

更新:

这是确切的命令行:mvn -X -e -nsu release:perform -Dgoals=install -DlocalCheckout=true -Darguments="-DadditionalJOption=-Xdoclint:none -DskipTests"

我用mvnDebug而不是运行mvn并在org.apache.maven.plugins.release.PerformReleaseMojo.createGoals(). 当断点被击中时,我检查了以下值goals

main[1] stop in org.apache.maven.plugins.release.PerformReleaseMojo.createGoals
Deferring breakpoint org.apache.maven.plugins.release.PerformReleaseMojo.createGoals.
It will be set after the class is loaded.
main[1] run
> Set deferred breakpoint org.apache.maven.plugins.release.PerformReleaseMojo.createGoals

Breakpoint hit: "thread=main", org.apache.maven.plugins.release.PerformReleaseMojo.createGoals(), line=220 bci=0

main[1] print this.goals
 this.goals = "deploy"
main[1] print java.lang.System.getProperty("goals")
 java.lang.System.getProperty("goals") = "install"

[createGoals][1]调用的时候,goals肯定已经被注入了,但是我不熟悉maven代码不知道从哪里来的。

标签: mavenmaven-release-plugin

解决方案


推荐阅读