我正在尝试将svn.revision添加到项目版本作为内部版本号,但似乎无法这样做。我的jar有正确的名称durin打包,但它安装在我的本地存储库中,就好像$ {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>
答案 0 :(得分:9)
问题分为两部分:
您尝试在解决之前将buildNumber
设置为版本,因此它始终为${buildNumber}
而不是已解析的值。
您应该将buildNumber
设置为构建中的finalName
元素,而不是尝试动态更改版本。这将在本地存储库中创建具有预期名称的工件。
安装插件将忽略finalName
并将其部署为1.0.0-SNAPSHOT
,无论如何,我不知道如何解决这个问题。如果您将插件配置如下,则buildNumber
会添加到Manifest中。
所以你的配置会是这样的:
<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解析版本一般。下面的配置显示了如何将修订添加到Manifest。
就您的配置而言,假设您的SCM网址设置正确,我看起来没问题。如果您的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>
答案 1 :(得分:4)
在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
将通过打包和部署得到认可。