我已配置Jenkins作业以自动释放我的maven项目。这可以通过以下方式完成:mvn --batch-mode clean release:prepare release:perform
在批处理模式下,将自动确定发行版本和开发版本。这正是我想要的。
问题是我想增加第二个版本而不是第三个版本。因此,当我发布1.2.0版本时,下一个开发版本必须是1.3.0-SNAPSHOT。不是1.2.1-SNAPSHOT。 添加命令行参数不是一个选项,因为这会强制我不断编辑构建作业。
有关如何更改用于确定下一个开发版本的算法的任何建议吗?
答案 0 :(得分:4)
我知道这是一篇有点旧的帖子,但我没有找到一个我真正喜欢在线的答案,而且我能够想出一些可能对其他人有用的东西......
我想在OP状态下增加minorVersion,我可以通过在我的项目POM中使用构建帮助程序插件(解析版本)和发布插件的组合来实现。注意"初始化"在POM和maven run属性中引用的阶段......
这里是POM的摘录,我们使用构建帮助器插件来解析我们可以在发布插件中引用的版本...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${maven.build.helper.plugin.version}</version>
<executions>
<execution>
<id>parse-versions-for-release</id>
<phase>initialize</phase>
<goals>
<goal>parse-version</goal>
</goals>
<configuration>
<propertyPrefix>parsedVersion</propertyPrefix>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${maven.release.plugin.version}</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<tagNameFormat>@{project.artifactId}-@{project.version}</tagNameFormat>
<useReleaseProfile>false</useReleaseProfile>
<developmentVersion>${parsedVersion.majorVersion}.${parsedVersion.nextMinorVersion}.0-SNAPSHOT</developmentVersion>
</configuration>
</plugin>
现在我们可以运行一个非常正常的版本,但添加&#34;初始化&#34;阶段触发版本解析(并确保在查找解析版本之前发生)...
mvn initialize release:clean release:prepare release:perform
答案 1 :(得分:0)
正如Khmarbaise建议的那样,我也认为没有解决问题的方法。
是否有任何规则可以自动告诉您是否必须更改第二个或第三个数字?的确,我不这么认为。这么说,你不能要求Maven / Jenkins为你选择它,一次是主要版本数字,另一个是小版本数字。
您必须通过参数更改它,或者让用户通过Jenkins M2 Release插件对其进行配置,如willome所建议的那样。 只能是手动操作。
答案 2 :(得分:0)
如果在Jenkins中使用参数化构建,则可以使用命令行参数而不编辑作业。检查作业配置页面中的“此构建参数化”选项。
这不会让Jenkins完全独立完成发布(这很好;我们不希望机器人接受我们的工作!) - 当你从Jenkins手动启动构建时,你将成为能够设置您配置的任何参数。
答案 3 :(得分:0)
您可以使用自定义groovy脚本自动为releaseVersion和developmentVersion提供maven-release-plugin。然后maven命令会看起来像:
mvn clean release:clean release:prepare release:perform -DreleaseVersion = $ {releaseVersion} -DdevelopmentVersion = $ {developmentVersion}
按照this answer中的步骤更改groovy脚本的部分以适应您的用例(例如此部分):
def newFixVersion = 0;
if (hasSnapshotPart) {
newMinorRelVersion = minorVersion;
newMinorDevVersion = minorVersion + 1;
} else {
//TODO: either throw an exception here or change the newMinorRelVersion newMinorDevVersion appropriately to suite your use-cases:
//throw new IllegalArgumentException("The pom at location " + POM_LOCATION + " contains the version " + projectVersion + " which is not a snapshot version (missing " + SNAPSHOT_PART + "). This is a released version and nothing should happen to it!");
}
答案 4 :(得分:0)
我遇到了同样的问题,我希望在不运行多个命令或手动插入版本的情况下解决它。
这是我对y(或次要)增量的解决方案:
我在初始化阶段运行Groovy脚本。此脚本创建 release.properties 。将其添加到 pom.xml 中的 project / build / plugins 部分:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.6</version>
</dependency>
</dependencies>
<executions>
<!-- Force maven-release-plugin to increase MINOR, not PATCH, and create tag as vX.Y.Z -->
<execution>
<id>release-parameters</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<scripts>
<script>
<![CDATA[
final String SNAPSHOT = '-SNAPSHOT'
Properties releaseProps = new Properties()
File releasePropsFile = new File('release.properties')
String releaseVersion = '${project.version}'.replace('-SNAPSHOT', '')
String[] vNumbers = releaseVersion.split('\\.')
String snapshotVersion = vNumbers[0] + '.' + (Integer.parseInt(vNumbers[1]) + 1) + '.' + '0' + SNAPSHOT
releaseProps.setProperty('scm.tag', 'v' + releaseVersion)
releaseProps.setProperty('project.rel.${project.groupId}:${project.artifactId}', releaseVersion)
releaseProps.setProperty('project.dev.${project.groupId}:${project.artifactId}', snapshotVersion)
releaseProps.store(releasePropsFile.newWriter(), null)
]]>
</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
此脚本还会更改SCM中 vX.Y.Z 的标记名称。 初始化阶段未在发布:准备阶段执行。要解决此问题,您可以运行&#34; mvn install&#34;在发布之前,或将发布命令更改为:
mvn --batch-mode initialize clean release:prepare release:perform
关于release.properties:https://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html
答案 5 :(得分:0)
您可以使用build-helper-maven-plugin
。只需将以下内容添加到pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${maven.build.helper.plugin.version}</version>
</plugin>
并将命令更改为
mvn --batch-mode clean build-helper:parse-version release:prepare release:perform -DdevelopmentVersion=${parsedVersion.majorVersion}.${parsedVersion.nextMinorVersion}.0-SNAPSHOT
(请注意,根据运行此命令的环境,您可能需要使用$
:\
对\$
进行转义)
答案 6 :(得分:0)
projectVersionPolicyId
mojo中提供了一个参数release:prepare
:http://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#projectVersionPolicyId
可能没有内置的版本策略可以满足您的需求,但是您可以通过实现接口VersionPolicy来开发自己的版本策略。您可以看到maven-release-yearly-policy作为参考,它在版本号中使用年份来提供版本策略。