使用 maven 发布插件 autoVersionSubmodules 来增加主要版本

Posted

技术标签:

【中文标题】使用 maven 发布插件 autoVersionSubmodules 来增加主要版本【英文标题】:Using maven release plugin autoVersionSubmodules to increment Major version 【发布时间】:2011-04-05 19:51:23 【问题描述】:

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

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

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

知道如何实现这一目标吗?

谢谢。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢扎克的回答。我不希望它提示版本,但我也不想每次都去更改 releaseVersion 和 developmentVersion。我只是想看看有没有办法自动增加版本。使用 -DautoVesrionSubmodules 会增加次要版本,但我需要增加主要版本。我想从 1.1.0 到 1.2.0 @Arya 实际上-DautoVersionSubmodules 不会自动为您选择版本。它只确保指定的版本适用于所有模块(否则会提示您每个模块)。我重复一遍,“有些东西正在为你选择”。如果是 maven,我不认为它是发布插件。我怀疑你的 Hudson 配置中有一些东西可以做到这一点。【参考方案2】:

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

目前当我在版本 1.1.0-snapshot 下一个版本设置 到 1.1.1-snapshot 但理想情况下我希望它更改为 1.2.0-快照。

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

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

    创建 groovy 脚本,该脚本将从您的 pom.xml 中选择版本,按照您解释的方式递增,并将 developmentVersionreleaseVersion 设置为 Hudson 字符串参数。 在 Hudson 上创建工作 将 Groovy 脚本放在工作的工作区中 在作业中设置“执行系统 ​​groovy 脚本”构建步骤 - 提供 Groovy 脚本的路径 在作业中设置“调用*** 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  

干杯, 暴君

【讨论】:

以上是关于使用 maven 发布插件 autoVersionSubmodules 来增加主要版本的主要内容,如果未能解决你的问题,请参考以下文章

Maven发布插件和scm插件配置

Maven 发布插件:使用 SNAPSHOT 版本发布

使用 Maven 发布插件时避免 gpg 签名提示

使用maven发布插件的错误

使用 Maven 发布插件时无法标记 SCM

是否可以使用 Maven POM 文件为 Maven 发布插件配置 GIT Tag?