如何获取命令行属性来覆盖maven属性

时间:2012-12-04 17:40:20

标签: maven maven-release-plugin

我有一个pom文件,其中一些依赖项的版本号依赖于pom文件设置中指定的project version属性。我可以通过命令行覆盖它吗?如果是这样,怎么样?

这是长篇故事:

我们目前正在将我们的项目转移到maven,但我们还没有完成任何方式。有多个模块仍然没有使用maven构建,因此是我们项目中的依赖项(它们通过ant构建到jar中)。发布后,我们希望构建所有这些jar并包含与父项目相同的版本号。对于发布,执行两个步骤(直到我们可以使用maven获取所有内容)

  1. 这些罐子是用正确的发布版本(12.12.4.0)构建的。
  2. maven发布插件用于将项目部署到我们的工件库。
  3. 在第二步中,命令行参数用于指定版本:

    mvn release:prepare -DreleaseVersion=12.12.4.0 -DdevelopmentVersion=12.12.4.1-SNAPSHOT -Dtag=iv-12.12.4.0
    

    我希望使用指定的版本更新pom文件。但是,运行此命令时,仍在使用pom文件(12.12.4.0-SNAPSHOT)中的版本。这无法“检查快照的依赖项和插件”步骤,我需要解析仍然具有maven版本属性使用的12.12.4.0-SNAPSHOT版本的jar。

    这让我想到了如何覆盖它的原始问题,以便版本解析为命令行中指定的版本。 可以让我解决这个问题的其他问题是: 如何在此检查之前允许maven release插件更新pom文件? 如何跳过快照检查(不可取)

    我可以在pom文件中创建一个可以覆盖的属性,但是我必须在pom文件中的两个位置维护版本号。

    思想?

1 个答案:

答案 0 :(得分:44)

将参数直接从命令行放到pom中,例如:

mvn clean install -Dtestng.version=6.3.1

示例:

     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.test</groupId>
        <artifactId>test</artifactId>
        <version>1.0.0</version>
        <name>test</name>
        <properties>
                <testng.version>6.4</testng.version>
        </properties>

        <dependencies>
                <dependency>
                        <groupId>org.testng</groupId>
                        <artifactId>testng</artifactId>
                        <version>${testng.version}</version>
                        <scope>test</scope>
                </dependency>
        </dependencies>
</project>

如果你运行它,通常会使用testng版本6.4。但如果你运行它:mvn clean install -Dtestng.version=6.3.1将使用testng版本6.3.1。

请参阅Setting Maven params in Jenkins