我在 hudson 上使用 maven 发布插件,将 autoVersionSubmodules 设置为 true 以自动增加 poms 中的开发版本。
我想知道是否有办法让插件增加主要版本而不是次要版本。
目前,当我使用 1.1.0-snapshot 版本时,下一个版本设置为 1.1.1-snapshot,但理想情况下我希望它更改为 1.2.0-snapshot。
关于如何实现这一目标的任何想法?
谢谢。
我在 hudson 上使用 maven 发布插件,将 autoVersionSubmodules 设置为 true 以自动增加 poms 中的开发版本。
我想知道是否有办法让插件增加主要版本而不是次要版本。
目前,当我使用 1.1.0-snapshot 版本时,下一个版本设置为 1.1.1-snapshot,但理想情况下我希望它更改为 1.2.0-snapshot。
关于如何实现这一目标的任何想法?
谢谢。
maven 发布插件会提示您输入要标记的发布版本的值以及下一个开发版本。您可以定义这些以避免提示;通常你会在命令行中设置它们,比如mvn -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT
.
但是,如果没有提示您选择版本,那么您正在选择某些东西。如果您使用的是 Hudson 的 M2 Release Plugin,那么我认为它可以为您选择版本,但您可能应该找到一种明确配置它们的方法。有关您的特定设置的更多详细信息会有所帮助。
...如果有办法使插件增加主要版本而不是次要版本。
目前,当我使用 1.1.0-snapshot 版本时,下一个版本设置为 1.1.1-snapshot,但理想情况下我希望它更改为 1.2.0-snapshot。
您在这里描述的是 maven-release-plugin 正在增加您的修复版本,并且您希望增加次要版本。版本的x.y.z
意思[majorVersion].[minorVersion].[fixVersion]
。
我解决这个问题的方法如下:
pom.xml
按照您解释的方式从增量中选择版本,并将 and 设置developmentVersion
为releaseVersion
Hudson 字符串参数。 developmentVersion
和releaseVersion
属性调用 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}
干杯,
暴君