这个问题是更广泛的Automatically incrementing a build number in a Java project
的更窄版本具体来说,我希望Maven生成格式major.minor.sequence
的版本,其中major.minor
在pom.xml
中是硬编码的,但sequence
编号是从git rev-list HEAD --count
的输出中获得的命令git status
。我还想追加字符串" -WIP"如果nothing to commit, working tree clean
不包含单词{{1}}。
实现这一目标的最简单方法是什么?
答案 0 :(得分:0)
好吧,我想如果你真的希望它以这种方式工作,你必须在运行相应mvn
命令的git
命令周围编写一个包装器,计算版本字符串后缀,并在调用真正的-Dversion.suffix=
可执行文件时将其作为mvn
选项传递。
(然后在你的pom中你将版本设置为3.7.${version.suffix}
。)
如果可以找到用于编写脚本的等效接口,那么您可能应该确保避免使用人为目标接口(如字符串“无需提交,工作树清理”)。 (例如,查看--porcelain
文档中git status
选项的输出格式:https://git-scm.com/docs/git-status)
那就是说,你确定这是个好主意吗?无法保证提交的数量是严格增加的值,如果您有多个开发人员,则最终可能会使用相同版本号的不同版本。 Maven的-SNAPSHOT
约定并没有给你你所寻找的特异性,但是或多或少存在以承认你所寻找的特异性通常比它的价值更麻烦......
答案 1 :(得分:0)
为此,Maven 3.5.0中有一个解决方案,您可以将${sha1}
,${changelist}
,${revision}
用于此类目的。可以是其中一个,也可以将它们组合在一起。
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}${sha1}${changelist}</version>
...
<properties>
<revision>1.3.1</revision>
<changelist>-SNAPSHOT</changelist>
<sha1/>
</properties>
</project>
通过使用上述内容,您只需使用以下命令构建应用程序:
mvn clean package
但也可以这样做:
mvn -Drevision=2.7.1 clean package
根据您的示例,您可以使用:
mvn -Dsha1=-XXXX clean package
其中XXXX
可以替换为从Git(描述)中提取的信息,或者甚至更好地使用来自Jenkins(GIT_REVISION等)的信息。
非常重要的提示使用flatten-maven-plugin,如ci friendly documentation page中所述。