我正在尝试将 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>
有帮助吗?

解决方案

问题有两部分:

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

就您的配置而言,假设您的 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>

其他提示

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将由封装和部署被识别。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top