Jenkins Maven Release: 替换快照依赖项

4
在我们的一个Maven项目中,我们依赖于Commons-POM,其他项目也使用它,因此它不是Parent-POM的一部分。由于它还在开发中,我们引用了SNAPSHOT版本。
在使用Jenkins创建发布版本时,它会使用快照依赖项。但是我们希望使用最新的发布版本或者简单地将快照替换为发布版本。
因此,在Jenkins中是否可以替换快照版本?可能与手动执行Maven Release插件时相同(提示解决依赖关系)的方式?
4个回答

3
版本Maven插件提供了目标versions:use-latest-releases。您可以在常规构建之前使用此目标来执行预步骤maven调用,如下所示:
versions:use-latest-releases -Dincludes=com.yourcompany.yourgroupid:yourartifactid versions:commit scm:checkin
这样,您就可以保留SNAPSHOT依赖项,直到实际发布该组件为止。

或者如果您在属性中设置了版本,请使用 versions:update-properties - Klaus

2
也许可以通过设置一个参数(<version>${dependency.version}</version>)而不是硬编码版本号来实现,然后使用mvn clean install -Ddependecy.version=VERSION开始构建(在Jenkins中,您可以对构建进行参数化)。但这只是一个hack!
在开发过程中使用SNAPSHOT依赖项是可以的(有时很痛苦;-),但在发布项目之前,您应该发布该依赖项。
如果commons项目的开发(目前)与您的项目紧密耦合,您可以考虑将commons项目与您的项目放在同一个发布周期中。

1
谢谢@rotscher!使用版本参数效果很好。但是,我创建了一个名为“use-released-commons”的配置文件,而不是直接传递版本。因此,通过mvn clean install -Puse-released-commons构建项目时,它会覆盖版本属性并将其设置为发布的版本。 - fischermatte

1

我遇到了同样的问题,并从以下解决方案中获得了一些收益。 在Maven非交互式版本发布中,页面底部描述了使用releases.properties文件定义版本。

与其手动创建此文件,不如先使用以下命令在本地运行maven:

mvn -U release:prepare -DdryRun=true -Dresume=false

回答所有问题后,它会创建一个 releases.properties 文件供您使用。唯一需要做的就是编辑 release.properties 文件。
文件末尾是:
completedPhase=end-release

将此转换为中文:

将此更改为:

completedPhase=check-dependency-snapshots

查看:Maven Release Plugin phases。这将导致短路scm-check-modifications,但您在构建服务器上,因此不应该有本地修改。

我将此文件检入到项目根目录中的scm中(与pom处于同一级别)

在jenkins上,我有以下发布设置:

--batch-mode release:prepare release:perform

在我看来,它有点凌乱。我希望有一种更清晰的方式。

[运行: Jenkins 1.533,Jenkins Maven Release Plug-in插件0.12.0,Maven Integration插件1.533]

1

谢谢,我知道。我的问题是 - 我如何配置Jenkin插件,以便Maven Release插件知道它应该将SNAPSHOT依赖项解析为特定的发布版本。我在Jenkins中没有命令行,因此没有提示... - fischermatte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接