Использование плагина maven release autoVersionSubmodules для увеличения основной версии - PullRequest
8 голосов
/ 05 апреля 2011

Я использую плагин maven release на hudson, для которого autoVersionSubmodules установлено значение true, чтобы автоматически увеличивать версию разработки в poms.

Мне интересно, есть ли способ сделать плагин основнымверсия, а не минорная версия.

В настоящее время, когда у меня снимок версии 1.1.0, следующая версия настроена на снимок 1.1.1, но в идеале я хотел бы изменить его на снимок 1.2.0.

Есть идеи, как этого добиться?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 апреля 2011

Плагин релиза maven запрашивает у вас значения версии релиза для тегирования, а также для следующей версии разработки. Вы можете определить их, чтобы избежать подсказок; обычно вы устанавливаете их в командной строке, например, mvn -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT.

Однако, если вам не предлагается выбрать версию, значит, что-то выбирается для вас. Если вы используете плагин выпуска M2 для Hudson, то я думаю, что у него есть варианты выбора версии для вас, но вы, вероятно, должны найти способ настроить их явно. Более подробная информация о вашей конкретной настройке поможет.

4 голосов
/ 17 июля 2013

... если есть способ увеличить плагин основной версии а не минорная версия.

В настоящее время, когда я на снимке версии 1.1.0, устанавливается следующая версия. к 1.1.1-моментальному снимку, но в идеале я хотел бы изменить его на 1.2.0-снимок.

Что вы здесь описываете, так это то, что maven-release-plugin увеличивает вашу версию исправления, и вы хотите, чтобы дополнительная версия увеличивалась. Где версия x.y.z означает [majorVersion].[minorVersion].[fixVersion].

Я решил это следующим образом:

  1. Создайте скрипт groovy, который будет выбирать версию из вашего pom.xml, увеличивая его, как вы объясняете, и устанавливая developmentVersion и releaseVersion в качестве параметров строки Гудзона.
  2. Создать работу на Гудзоне
  3. Поместите скрипт Groovy в рабочее пространство вашей работы
  4. В задании задайте шаг сборки «Выполнить системный скрипт Groovy» - укажите путь к скрипту Groovy
  5. В задании задайте шаг сборки «Вызовите цели Maven верхнего уровня» и вызовите команду освобождения maven со свойствами developmentVersion и releaseVersion.

Шаг 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}  

Приветствия
Деспот

...