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】:
也许可以不硬编码版本但有一个参数 (
在开发期间拥有 SNAPSHOT 依赖项是可以的(有时会很痛苦 ;-),但在发布项目之前,您应该释放依赖项。
如果 commons 项目的开发(当前)与您的项目紧密耦合,您可以考虑暂时将 commons 项目与您的项目处于同一发布周期。
【讨论】:
谢谢@rotscher!使用版本参数效果很好。但我没有直接传递版本,而是创建了一个 Profileuse-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 发布:替换快照依赖的主要内容,如果未能解决你的问题,请参考以下文章