我可以使用buildnumber-maven-plugin设置项目版本吗?

Pet*_*ahn 13 maven-2 maven-plugin buildnumber-maven-plugin

我正在尝试将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>
Run Code Online (Sandbox Code Playgroud)

Ric*_*ler 9

问题分为两部分:

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

    而不是试图动态地更改版本,你应该设置buildNumberfinalName在构建元素.这将在本地存储库中创建具有预期名称的工件.

  2. 安装插件将忽略finalName并将其部署为1.0.0-SNAPSHOT无论如何,我不知道如何解决这个问题.buildNumber如果您按如下方式配置插件,则会将其添加到Manifest中.

    所以你的配置是这样的:

    <version>1.0.0-${release.identifier}</version>
    ...
    <build>
      <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
      ...
    </build>
    
    Run Code Online (Sandbox Code Playgroud)

我会避免在SNAPSHOT项目中使用内部版本号.

Maven提供SNAPSHOT关键字来表示活动开发中的易变项目.因此,如果您引用具有SNAPSHOT依赖项版本的项目,Maven将自动检查更新并使您的依赖项保持同步.

如果您随后在该版本的末尾添加内部版本号,则必须手动更新依赖项,因此您将失去使用SNAPSHOT后缀的任何好处.

我个人避免在可能的情况下使用内部版本号.如果我必须更新项目,我只是碰撞版本号,或使用像beta-2或的后缀RC2.如果您需要跟踪修订版本SNAPSHOT,我建议将其添加到Manifest,以便您可以检查构建源自何处,但使用标准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>
Run Code Online (Sandbox Code Playgroud)


hoa*_*at4 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>
Run Code Online (Sandbox Code Playgroud)

并且buildNumber会通过打包和部署得到认可。