【问题标题】:Using maven profile for artifact versioning使用 Maven 配置文件进行工件版本控制
【发布时间】:2012-05-17 20:52:55
【问题描述】:

我希望项目的版本号为正常发布版本控制的以下格式:

<version>1.0-SNAPSHOT</version>
<version>1.0.1-SNAPSHOT</version>
......

另一方面,我希望为每个合并的更改创建一个构建工件,如下所示:

<version>1.0-SNAPSHOT-${timestamp}</version>

我可以通过使用 maven 配置文件来实现这一点吗?类似:

<profiles>
    <profile>
        <id>normal</id>
        <version>1.0-SNAPSHOT<version>
    </proifle>
    <profile>
        <id>build</id>
        <version>1.0-SNAPSHOT-${timestamp}<version>
    </proifle>
</profiles>

这样我就可以像这样构建它:

mvn package -P normal  // this gives me artifact-1.0-SNAPSHOT.jar
or
mvn package -P build     // this gives me artifact-1.0-SNAPSHOT-${timestamp}.jar 

如果profile可以解决这个问题,还有哪些其他方法?

【问题讨论】:

  • 如果您将快照工件发布到 Nexus 等 Maven 存储库管理器,它将确保每个构建都有唯一的时间戳。

标签: maven build versioning profile artifactory


【解决方案1】:

虽然我不推荐这种方法,但您可以使用配置文件来完成此任务。可以这样做:

<version>${projectVersion}</version>
...
<profiles>
    <profile>
        <id>normal</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <projectVersion>1.0-SNAPSHOT</projectVersion>
        </properties>
    </profile>
    <profile>
        <id>build</id>
        <properties>
            <projectVersion>1.0-SNAPSHOT-${timestamp}</projectVersion>
        </properties>
    </profile>
</profiles>

【讨论】:

  • 在 maven 3 中,这将尝试在 .m2 目录中查找具有 ${projectVersion} 的路径,而不是子 pom.xml 文件中的实际版本号。
【解决方案2】:

使用Builder Number Plugin 和/或评估内置timestamp property。无论如何,不推荐您的方法,因为 SNAPSHOT 必须始终是最新的。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2010-12-30
    • 2011-06-08
    相关资源
    最近更新 更多