maven从命令行覆盖project.version

时间:2013-08-07 10:00:10

标签: maven

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

以下不起作用:

mvn deploy -Dversion=1.0-test-SNAPSHOT  
mvn deploy -Dproject.version=1.0-test-SNAPSHOT  

提前感谢您的帮助!

我的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>

3 个答案:

答案 0 :(得分:44)

您无法覆盖project.version。尝试:

mvn versions:set -DnewVersion=<version>

通常,我首先更新parentPom

mvn versions:set -DnewVersion=1.0.3-SNAPSHOT

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

mvn versions:update-child-modules

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

mvn install

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

<version>${project.version}</version>

检查maven Versions Plugin docs

答案 1 :(得分:6)

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

确保您使用pom.xml

中的变量

例如:

mvn deploy -Dversion=1.0-test-SNAPSHOT 
pom.xml

中的

<version>${version}</version>

这应该在运行时被选中。如果此方法不起作用,您能否在pom.xml

中显示您如何使用它们

答案 2 :(得分:4)

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

<version>${revision}</version>
...
<properties>
    <revision>1.0.0-SNAPSHOT</revision>
</properties>

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

mvn -Drevision=2.0.0-SNAPSHOT clean package

显然,只有在占位符属性称为revision(您还可以在您的版本中使用changelistsha1占位符的情况下,此方法才有效。

请参见https://maven.apache.org/maven-ci-friendly.html