Jenkins Maven 发布:替换快照依赖

Posted

技术标签:

【中文标题】Jenkins Maven 发布:替换快照依赖【英文标题】:Jenkins Maven Release: Replace Snapshot Dependencies 【发布时间】:2013-08-05 07:46:31 【问题描述】:

在我们的一个 maven 项目中,我们依赖于 Commons-POM,它也被其他项目使用,因此 不是 Parent-POM 的一部分。由于它也在开发中,我们指的是 SNAPSHOT 版本。

使用 Jenkins 创建版本时,它将使用快照依赖项。但我们想要的是使用最新版本或简单地将快照替换为发布版本。

那么在 Jenkins 中是否可以替换快照版本?也许同样的方式,Maven Release插件在手动执行时会这样做(它会提示解决依赖关系)?

【问题讨论】:

【参考方案1】:

Versions Maven Plugin 提供目标 versions:use-latest-releases。您可以在常规构建之前在步骤前的 maven 调用中使用此目标,如下所示:

versions:use-latest-releases -Dincludes=com.yourcompany.yourgroupid:yourartifactid versions:commit scm:checkin

这样,您可以保留 SNAPSHOT 依赖项,直到实际发布工件。

【讨论】:

或者,如果您在属性中设置了版本,请使用 versions:update-properties【参考方案2】:

也许可以不硬编码版本但有一个参数 ($dependency.version) 然后使用 mvn clean install 开始构建 - Ddependecy.version=VERSION(在 Jenkins 中,您可以参数化构建)。但这只不过是一种 hack!

在开发期间拥有 SNAPSHOT 依赖项是可以的(有时会很痛苦 ;-),但在发布项目之前,您应该释放依赖项。

如果 commons 项目的开发(当前)与您的项目紧密耦合,您可以考虑暂时将 commons 项目与您的项目处于同一发布周期。

【讨论】:

谢谢@rotscher!使用版本参数效果很好。但我没有直接传递版本,而是创建了一个 Profile use-released-commons。所以当通过mvn clean install -Puse-released-commons构建项目时,它会覆盖version属性并将其设置为发布版本。【参考方案3】:

M2 Release plugin 是标准 Maven release plugin 的 Jenkins 包装器。

【讨论】:

谢谢,我知道。我的问题是 - 我如何配置 Jenkins 插件,所以 Maven 发布插件知道它应该将 SNAPSHOT 依赖关系解析为某个发布版本。我在 Jenkins 中没有命令行,所以没有提示...【参考方案4】:

我有同样的问题,并从以下解决方案中获得了一些成果。 在Maven Non-Interactive releases 中,页面底部描述了使用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 Plug-in 0.12.0、Maven Integration plugin 1.533]

【讨论】:

以上是关于Jenkins Maven 发布:替换快照依赖的主要内容,如果未能解决你的问题,请参考以下文章

Maven 发布插件不更新依赖管理中的快照

避免 Jenkins 不必要的 IVY 快照发布

快照/发布:Maven 项目的版本控制策略

maven中snapshot快照库和release发布库的区别和作用

Maven 3 不会从本地存储库更新快照依赖项

由于未能构建依赖项的发布版本,Maven 发布构建在 Jenkins 中失败