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

时间:2009-08-04 21:27:02

标签: 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>

2 个答案:

答案 0 :(得分:9)

问题分为两部分:

  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>
    

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

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

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

    我个人避免在可能的情况下尽可能使用内部版本号。如果我必须更新项目,我只是提出版本号,或者使用beta-2RC2这样的后缀。如果您需要跟踪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将通过打包和部署得到认可。