操纵项目版本属性以删除SNAPSHOT?

时间:2012-11-12 16:48:51

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

我有一个版本为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 Release Plugin之外,这个版本适用于所有情况,它抱怨它无法解析版本(可以理解的是,它无法自动猜测下一个开发版本)。

3 个答案:

答案 0 :(得分:37)

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

<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插件的“解析版”mojo将会为您提供以下属性,您可以根据需要使用这些属性:

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

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

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

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

答案 1 :(得分:1)

对于那些希望做更多事情或想要从内部版本号中删除SNAPSHOT的人来说,这个插件非常有帮助 http://dev.sphere.io/http-api-projects-carts.html#set-line-item-custom-type

我特别发现这个有用

通过将正则表达式替换应用于值

来设置属性
<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>

答案 2 :(得分:0)

对于那些希望在其版本中使用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