2011-04-05 133 views
8

我在哈德逊上使用maven版本插件,并将autoVersionSubmodules设置为true以自动递增poms中的开发版本。使用Maven发布插件autoVersionSubmodules来增加主要版本

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

目前,当我处于版本1.1.0快照时,下一个版本设置为1.1.1快照,但理想情况下,我希望它更改为1.2.0快照。

有关如何实现这一点的任何想法?

谢谢。

回答

5

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

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

+0

扎克感谢您的回答。我不希望它提示版本,但我也不想每次都去更改releaseVersion和developmentVersion。我只想看看是否有办法自动增加版本。使用-DautoVesrionSubmodules会增加次要版本,但我需要增加主要版本。我想从1.1.0到1.2.0 – Arya 2011-04-06 12:05:46

+0

@Arya实际上'-DautoVersionSubmodules'不会自动为你选择版本。它只确保指定的版本适用于所有模块(否则会提示您输入每个模块)。我再说一遍,“有些东西正在为你选择”。如果它是maven,我不认为它是发布插件。我怀疑你的哈德森配置中有一些东西可以做到这一点。 – 2011-04-06 21:36:55

4

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

目前,当我在1.1.0版本快照下一版本设置 到1.1.1的快照,但最好我想它改为 1.2.0快照。

你在这里描述的是,maven-release-plugin正在递增你的修复版本,你希望次版本增加。其中版本x.y.z表示[majorVersion].[minorVersion].[fixVersion]

我解决这个问题的方法是通过以下方式:

  1. 创建Groovy脚本会挑版本从pom.xml增加它在你解释的方式,并设置developmentVersionreleaseVersion如Hudson串参数。
  2. 在你的工作的工作空间
  3. 在工作中哈德逊创建工作
  4. 将Groovy脚本设置了“执行系统Groovy脚本”生成步骤 - 提供路径Groovy脚本
  5. 在作业布置“调用顶级Maven目标”构建步骤,并调用带有developmentVersionreleaseVersion属性的maven release命令。

第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} 

干杯,
暴君