我有一个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发布插件之外的所有情况,它抱怨它无法解析版本(可以理解,它也不能自动猜测下一个开发版本)。
我意识到这个问题有点过时了,但我刚刚遇到了类似的情况,这就是我解决它的方式:
<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>
这个构建助手插件的"解析版本"mojo 将做的是为您提供以下属性,您可以根据需要使用这些属性:
parsedVersion.majorVersion
parsedVersion.minorVersion
parsedVersion.incrementalVersion
parsedVersion.qualifier
parsedVersion.buildNumber
这应该涵盖所有您想要的版本"部分"。我目前正在使用它来构建 chrome 扩展程序,其中清单版本不能包含"-SNAPSHOT",并且必须最多用点分隔 4 个数字。在我的用例中,我使用此组合来产生所需的结果:
"version":"${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"
因此,我实质上是剥离"-SNAPSHOT",以便我的扩展的本地开发副本将正确安装以进行测试。你可以用这些碎片建造任何你想要的东西。=)
对于希望做更多事情或想从内部版本号中删除 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>
对于那些想要在其版本中使用 4 个数字 (x.y.z.a) 的人,以下是配置构建助手 Maven 插件的方法。这个想法是将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