原文链接
这个插件的设计是为了当你每次构建项目时能够获得一个唯一的构建序列号(build number)。比如说,打包时,包名称以当前构建时间结尾,或者每次生成的jar包中包含唯一的序列号。
使用示例:
本示例中使用了此插件的create goal,也就是基于SCM(Source code management)的版本号来获取构建序列号(build number).
在项目的pom文件中添加如下
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<shortRevisionLength>7</shortRevisionLength>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
</configuration>
</plugin>
解释:
executions
部分表示在maven的validate阶段执行此插件的create goal。shortRevisionLength
部分用来指定获取SCM版本号的长度,比如git revision为b0c1c69be579175e63eeb1c056d607f01ab61e96,那么此示例中只获取后7位,也就是ab61e96。doCheck
设置为false表示不检查是否本地有文件被修改过。如果设置为true,一旦本地有文件被修改,那么构建就会失败。doUpdate
表示是否跟新本地的repository,false 表示不跟新。
在打包插件的配置如下,注意这里使用了${buildNumber}
来使用生成的构建序列号。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Version>${project.version}-${buildNumber}-${maven.build.timestamp}</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
执行maven的打包命令mvn -DskipTests=true clean package
.
此时我们可以看到此插件被执行
解压生成的jar包,打开 manifest (META-INF/MANIFEST.mf),我们可以发现${buildNumber}
被替换成相应的构建序列号了。