24

我有一个版本为 0.0.1-SNAPSHOT 的项目,当我们通过 TeamCity 构建它时,我们还获得了一个 build.vcs.number 属性,它是触发构建的 Subversion 版本。

在我们的程序集中,我们创建了一个名为 foo-distribution-0.0.1-SNAPSHOT.zip 之类的 zip 文件,但我想知道是否有一种方法可以将 build.vcs.number 属性插入到工件名称中以提供 foo-分发-0.0.1.12345-SNAPSHOT.zip?

是否有一个内置属性只是版本号的数字部分,或者是其他一些拆分 -SNAPSHOT 部分的方式?

编辑:我已经尝试将 pom.xml 版本设置为 ${my.version}-SNAPSHOT,然后在属性中定义 my.version - 这适用于任何情况,除了 Maven 发布插件,它抱怨它无法解析版本(可以理解,它也不能自动猜测下一个开发版本)。

4

3 回答 3

54

我意识到这个问题有点过时了,但我遇到了类似的情况,这就是我解决它的方法:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>parse-version</id>
        <goals>
          <goal>parse-version</goal>
        </goals>
      </execution>
    </executions>
</plugin>

这个 build-helper 插件的“parse-version”mojo 将为您提供以下属性,您可以根据需要使用它们:

parsedVersion.majorVersion
parsedVersion.minorVersion
parsedVersion.incrementalVersion
parsedVersion.qualifier
parsedVersion.buildNumber

这应该涵盖您想要的所有版本“部分”。我目前正在使用它来构建 chrome 扩展,其中清单版本不能包含“-SNAPSHOT”,并且最多只能由点分隔 4 个数字。在我的用例中,我使用这种组合来产生所需的结果:

"version":"${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"

所以,我基本上是在剥离“-SNAPSHOT”,所以我的扩展的本地开发副本将正确安装以进行测试。你可以用这些碎片建造任何你想要的东西。=)

于 2013-08-14T14:40:00.937 回答
4

对于其他想要做更多事情或想从内部版本号中删除 SNAPSHOT 的人,这个插件非常有用 http://www.mojohaus.org/build-helper-maven-plugin/usage.html

我特别发现这很有用

通过对值应用正则表达式替换来设置属性

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.9.1</version>
        <executions>
          <execution>
            <id>regex-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>human.version</name>
              <value>$\{project.version}</value>
              <regex>-SNAPSHOT</regex>
              <replacement> pre-release development version</replacement>
              <failIfNoMatch>false</failIfNoMatch>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
于 2015-10-19T13:58:26.723 回答
0

对于那些想要在他们的版本中使用 4 个数字 (xyza) 的人,这里是您可以配置Build Helper Maven 插件的方法。这个想法是替换x.y.z.a-SNAPSHOTx.y.z-a允许 build-helper 插件解析buildNumber.

antrun插件仅用于调试目的。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>regex-property</id>
                    <goals>
                        <goal>regex-property</goal>
                    </goals>
                    <configuration>
                        <name>modified.version</name>
                        <value>${project.version}</value>
                        <regex>\.([0-9]+)-SNAPSHOT</regex>
                        <replacement>-$1</replacement>
                        <failIfNoMatch>false</failIfNoMatch>
                    </configuration>
                </execution>

                <execution>
                    <id>parse-version</id>
                    <goals>
                        <goal>parse-version</goal>
                    </goals>
                    <configuration>
                    <versionString>${modified.version}</versionString>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <echo>Major: ${parsedVersion.majorVersion}</echo>
                            <echo>Minor: ${parsedVersion.minorVersion}</echo>
                            <echo>Incremental: ${parsedVersion.incrementalVersion}</echo>
                            <echo>Qualifier: ${parsedVersion.qualifier}</echo>
                            <echo>BuildNumber: ${parsedVersion.buildNumber}</echo>
                            <echo>----------------</echo>
                            <echo>Next Major: ${parsedVersion.nextMajorVersion}</echo>
                            <echo>Next Minor: ${parsedVersion.nextMinorVersion}</echo>
                            <echo>Next Incremental: ${parsedVersion.nextIncrementalVersion}</echo>
                            <echo>Next BuildNumber: ${parsedVersion.nextBuildNumber}</echo>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

mvn validate在版本为 7.0.0.29-SNAPSHOT 的项目上运行:

[INFO] --- build-helper-maven-plugin:3.0.0:regex-property (regex-property) @
[INFO] --- build-helper-maven-plugin:3.0.0:parse-version (parse-version) @ 
[INFO] --- maven-antrun-plugin:1.1:run (default) @ 
[INFO] Executing tasks
 [echo] Major: 7
 [echo] Minor: 0
 [echo] Incremental: 0
 [echo] Qualifier:
 [echo] BuildNumber: 29
 [echo] ----------------
 [echo] Next Major: 8
 [echo] Next Minor: 1
 [echo] Next Incremental: 1
 [echo] Next BuildNumber: 30
于 2019-09-13T15:13:45.993 回答