20

我正在尝试将 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>
4

2 回答 2

11

问题有两个部分:

  1. 您试图在buildNumber解决之前将其设置为版本,因此它将始终是${buildNumber}而不是解决的值。

    与其尝试动态更改版本,不如将 设置buildNumber为构建中的finalName元素。这将在本地存储库中创建具有预期名称的工件。

  2. 安装插件将忽略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-2or之类的后缀RC2。如果您需要跟踪 中的修订SNAPSHOT,我建议将其添加到 Manifest 以便您可以检查构建的来源,但使用标准SNAPSHOT后缀以允许 Maven 正常解析版本。下面的配置显示了如何将修订添加到 Manifest。

就您的配置而言,假设您的 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>
于 2009-08-08T08:39:37.763 回答
5

在后面加上这个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将通过打包和部署来识别。

于 2017-01-15T15:19:24.223 回答