【问题标题】:Can I set the project version with a buildnumber-maven-plugin?我可以使用 buildnumber-maven-plugin 设置项目版本吗?
【发布时间】:2010-11-16 19:58:04
【问题描述】:

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

【问题讨论】:

    标签: maven-2 maven-plugin buildnumber-maven-plugin


    【解决方案1】:

    问题有两部分:

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

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

    2. 安装插件将忽略 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-2RC2 之类的后缀。如果您需要跟踪 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>
    

    【讨论】:

      【解决方案2】:

      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会被打包和部署识别。

      【讨论】:

      • 谢谢。仅供参考,在切换到 git 后,我​​们开始将 builder 从 jenkins 向下传递,因为 git 使得内部版本号不太好说
      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多