9

我在 hudson 上使用 maven 发布插件,将 autoVersionSubmodules 设置为 true 以自动增加 poms 中的开发版本。

我想知道是否有办法让插件增加主要版本而不是次要版本。

目前,当我使用 1.1.0-snapshot 版本时,下一个版本设置为 1.1.1-snapshot,但理想情况下我希望它更改为 1.2.0-snapshot。

关于如何实现这一目标的任何想法?

谢谢。

4

2 回答 2

5

maven 发布插件会提示您输入要标记的发布版本的值以及下一个开发版本。您可以定义这些以避免提示;通常你会在命令行中设置它们,比如mvn -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT.

但是,如果没有提示您选择版本,那么您正在选择某些东西。如果您使用的是 Hudson 的 M2 Release Plugin,那么我认为它可以为您选择版本,但您可能应该找到一种明确配置它们的方法。有关您的特定设置的更多详细信息会有所帮助。

于 2011-04-06T02:29:00.040 回答
4

...如果有办法使插件增加主要版本而不是次要版本。

目前,当我使用 1.1.0-snapshot 版本时,下一个版本设置为 1.1.1-snapshot,但理想情况下我希望它更改为 1.2.0-snapshot。

您在这里描述的是 maven-release-plugin 正在增加您的修复版本,并且您希望增加次要版本。版本的x.y.z意思[majorVersion].[minorVersion].[fixVersion]

我解决这个问题的方法如下:

  1. 创建 groovy 脚本,它将pom.xml按照您解释的方式从增量中选择版本,并将 and 设置developmentVersionreleaseVersionHudson 字符串参数。
  2. 在 Hudson 上创建工作
  3. 将 Groovy 脚本放置在工作的工作区中
  4. 在作业中设置“执行系统 ​​groovy 脚本”构建步骤 - 提供 Groovy 脚本的路径
  5. 在作业中设置“调用顶级 Maven 目标”构建步骤并使用developmentVersionreleaseVersion属性调用 maven 发布命令。

第1步:

import hudson.model.*  

createReleaseAndDevelopmentVersions ();  

def createReleaseAndDevelopmentVersions () {  
    def POM_LOCATION = build.parent.builds[0].properties.get("envVars")['WORKSPACE'] + "/pom.xml";  
    def SNAPSHOT_PART = "-SNAPSHOT";  
    def projectVersion = findOutCurrentVersion(POM_LOCATION);  
    def versionParts = projectVersion.tokenize('.');  
    def mayorVersionPart = versionParts[0];  
    def minorVersionPart = versionParts[1];  
    def fixVersionPart = versionParts[2];  
    def snapshotPartIndex = fixVersionPart.indexOf(SNAPSHOT_PART);  
    boolean hasSnapshotPart = snapshotPartIndex != -1;  
    if (hasSnapshotPart) {  
        fixVersionPart = fixVersionPart.substring(0, snapshotPartIndex);  
    }  
    int minorVersion = minorVersionPart.toInteger();  
    int fixVersion = fixVersionPart.toInteger();  
    def newFixVersion = 0;  
    def newMinorRelVersion;  
    def newMinorDevVersion;  
    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!");  
    }  
    def releaseVersion = mayorVersionPart  + "." + newMinorRelVersion + "." + newFixVersion;  
    def developmentVersion = mayorVersionPart  + "." + newMinorDevVersion + "." + newFixVersion + SNAPSHOT_PART;  
    createJenkinsVariablesAndAddToCurrentJob(releaseVersion, developmentVersion);  
}  

def findOutCurrentVersion (POM_LOCATION) {  
    def thr = Thread.currentThread()  
    def build = thr?.executable  
    def projectVersionParam = "projectVersion"  
    def resolver = build.buildVariableResolver  
    def projectVersionParamValue = resolver.resolve(projectVersionParam)  
    return projectVersionParamValue  
}  
def createJenkinsVariablesAndAddToCurrentJob (releaseVersion, developmentVersion) {  
    def pa = new ParametersAction([  
        new StringParameterValue("releaseVersion", releaseVersion), new StringParameterValue("developmentVersion", developmentVersion)  
    ])  
    Thread.currentThread().executable.addAction(pa)  
}  

第 5 步(maven 命令):

clean release:clean release:prepare release:perform -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}  

干杯,
暴君

于 2013-07-17T12:18:46.350 回答