maven从命令行覆盖project.version

mr.*_*ing 34 maven

我想知道是否可以通过命令行覆盖maven中的project.version/version变量?

以下不起作用:

mvn deploy -Dversion=1.0-test-SNAPSHOT  
mvn deploy -Dproject.version=1.0-test-SNAPSHOT  
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

我的pom.xml是:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>just.another.company.name</groupId>
    <artifactId>my-pom</artifactId>
    <version>1.3-SNAPSHOT</version>
    <name>My Module</name>
    <packaging>jar</packaging>
    <description>POM Project for My Module</description>
</project>
Run Code Online (Sandbox Code Playgroud)

meb*_*ada 49

只是你无法覆盖project.version.尝试:

mvn versions:set -DnewVersion=<version>
Run Code Online (Sandbox Code Playgroud)

通常,我首先更新parentPom

mvn versions:set -DnewVersion=1.0.3-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

如果父pom包含所有子项目,这就足够了,否则你将需要转到包含所有子项目的超级项目并执行

mvn versions:update-child-modules
Run Code Online (Sandbox Code Playgroud)

如果parentPom存在于相对路径中,那么前两个步骤就足够了,否则你将需要使用新版本安装parentPom项目

mvn install
Run Code Online (Sandbox Code Playgroud)

通常,如果您没有依赖于另一个模块的模块,这就足够了.如果你这样做,请将其版本声明为project.version,它会自动反映出来

<version>${project.version}</version>
Run Code Online (Sandbox Code Playgroud)

检查maven Versions Plugin文档.


Joh*_*nis 13

在 Maven 3.5+ 中,如果您将以下内容放入 pom.xml

<version>${revision}</version>
...
<properties>
    <revision>1.0.0-SNAPSHOT</revision>
</properties>
Run Code Online (Sandbox Code Playgroud)

默认情况下它将使用 1.0.0-SNAPSHOT,但您可以在命令行上覆盖它:

mvn -Drevision=2.0.0-SNAPSHOT clean package
Run Code Online (Sandbox Code Playgroud)

显然,这仅在调用占位符属性时才有效revision(您也可以在您的版本中使用changelistsha1占位符)。

https://maven.apache.org/maven-ci-friendly.html

  • 嗯,根据 https://maven.apache.org/maven-ci-Friendly.html#dependencies 你必须在依赖项中使用 `${project.version}` 而不是 `${revision}` 并添加 `flatten -maven-plugin` 到父 pom,但即使我这样做了,我也无法让它工作。 (2认同)

Arp*_*pit 6

是的,您可以通过从命令行传递所需的变量来覆盖项目版本.

确保您使用的是变量 pom.xml

例如:

mvn deploy -Dversion=1.0-test-SNAPSHOT 
Run Code Online (Sandbox Code Playgroud)

pom.xml

<version>${version}</version>
Run Code Online (Sandbox Code Playgroud)

这应该在运行时被选中.如果这种方法不起作用,请告诉您如何使用它们pom.xml

  • 我面临同样的情况,使用 Maven 3.xx 传递的参数将被忽略。Maven 抱怨包含表达式。 (3认同)
  • 之所以被否决,是因为 ${version} 或除 John Velonis 的答案中列出的 3 之外的任何名称都会导致记者注意到 mvn 发出警告。 (2认同)