我可以使用 buildnumber-maven-plugin 设置项目版本吗?
-
22-07-2019 - |
题
我正在尝试将 svn.revision 添加到项目版本作为内部版本号,但似乎无法这样做。我的 jar 在打包期间具有正确的名称,但它安装在我的本地存储库中,就好像在设置版本时 ${buildNumber} 未定义。
我得到 foo-1.0.0-SNAPSHOT-${buildNumber} 而不是 foo-1.0.0-SNAPSHOT-304
知道我做错了什么或者对项目版本添加修订是一个坏主意吗?谢谢您的帮助。
<project>
...
<version>1.0.0-${release.identifier}-${buildNumber}</version>
<properties>
<release.identifier>SNAPSHOT</release.identifier>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</project>
解决方案
问题有两部分:
您正在尝试设置
buildNumber
进入解决之前的版本,所以它永远是${buildNumber}
而不是解析值。您应该设置
buildNumber
进入finalName
构建中的元素。这将在本地存储库中创建具有预期名称的工件。安装插件将忽略
finalName
并将其部署为1.0.0-SNAPSHOT
无论如何,我不知道有什么方法可以解决这个问题。这buildNumber
如果您按如下方式配置插件,则会将其添加到清单中。所以你的配置会是这样的:
<version>1.0.0-${release.identifier}</version> ... <build> <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> ... </build>
我会避免使用内部版本号 SNAPSHOT
项目。
Maven 提供了 SNAPSHOT
关键字表示正在积极开发的不稳定项目。因此,如果您引用一个带有 SNAPSHOT
依赖版本,Maven 将自动检查更新并保持您的依赖同步。
如果您随后将内部版本号添加到该版本的末尾,则必须手动更新依赖项,因此您将失去拥有该版本的任何好处 SNAPSHOT
后缀。
无论如何,我个人会尽可能避免使用内部版本号。如果我必须更新项目,我只需更改版本号,或者使用类似的后缀 beta-2
或者 RC2
. 。如果您需要跟踪修订 SNAPSHOT
, ,我建议将其添加到清单中,以便您可以检查构建的来源,但使用标准 SNAPSHOT
后缀以允许 Maven 正常解析版本。下面的配置显示了如何将修订添加到清单中。
就您的配置而言,假设您的 SCM url 设置正确,对我来说看起来没问题。如果您的 POM 中没有 SCM 配置,则可能是问题所在。
你能和 -X
并检查插件的任何输出,表明为什么它没有设置属性?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>0.9.4</version>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
其他提示
buildnumber-maven-plugin
后添加这样的:
<plugin>
<groupId>io.github.michaldo</groupId>
<artifactId>nashorn-maven-plugin</artifactId>
<version>0.0.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>eval</goal>
</goals>
<configuration>
<script>
$project.artifact.version = "${buildNumber}";
</script>
</configuration>
</execution>
</executions>
</plugin>
和所述buildNumber
将由封装和部署被识别。