【问题标题】:Manipulate project version property to remove SNAPSHOT?操纵项目版本属性以删除 SNAPSHOT?
【发布时间】:2012-11-01 02:49:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 摆脱“-SNAPSHOT”最简单的解决方案是释放工件。最好的办法是将修订号放入清单文件中,而不是作为文件名的一部分。使用属性来定义版本号将不起作用,也没有意义。您可以使用在构建期间过滤的属性,该属性也可以包含版本号。

标签: maven maven-assembly-plugin teamcity-7.0


【解决方案1】:

对于那些希望在其版本中使用 4 个数字 (x.y.z.a) 的用户,您可以通过以下方式配置 Build Helper Maven Plugin。 想法是将x.y.z.a-SNAPSHOT 替换为x.y.z-a,这将允许构建助手插件解析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>

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

[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

【讨论】:

    【解决方案2】:

    对于其他想要做更多事情或想从内部版本号中删除 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>
    

    【讨论】:

      【解决方案3】:

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

      <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”,因此我的扩展程序的本地开发副本将正确安装以进行测试。你可以用这些碎片建造任何你想要的东西。 =)

      【讨论】:

      • 要增加该版本,可以使用以下字符串:newVersion=\${parsedVersion.majorVersion}${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}
      猜你喜欢
      • 2014-06-23
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多