以批处理模式发布 - 将依赖项版本更改为 SNAPSHOTS
Posted
技术标签:
【中文标题】以批处理模式发布 - 将依赖项版本更改为 SNAPSHOTS【英文标题】:Release in batch mode - change dependencies version to SNAPSHOTS 【发布时间】:2015-09-16 21:15:39 【问题描述】:来自 Maven 发布插件 - Prepare a Release document,准备发布经历了以下发布阶段:
-
检查源中没有未提交的更改
检查是否没有 SNAPSHOT 依赖项
将 POM 中的版本从 x-SNAPSHOT 更改为新版本(系统会提示您选择要使用的版本)
转换 POM 中的 SCM 信息以包含标签的最终目的地
针对修改后的 POM 运行项目测试,以确认一切正常
提交修改后的 POM
用版本名称标记 SCM 中的代码(将提示输入)
将 POM 中的版本添加到新值 y-SNAPSHOT(也会提示输入这些值)
提交修改后的 POM
我的问题是:
有没有办法在批处理模式下为依赖项执行第 8 步?我知道如何使用参数 (developmentVersion) 将项目版本更改为 SNAPSHOT,但我不知道如何更改依赖项。
当我使用时
mvn 发布:准备发布:执行
maven 告诉我我的 pom 中有 SNAPSHOT 依赖项,我可以为它们提供发布和开发版本。但是有没有办法以批处理模式给它们?
我知道 maven-versions-plugin:use-latest/next-snapshot 但它对我不起作用。
我的版本号流程应该是这样的:
01.04.05-SNAPSHOT(发布前) 01.04.05(发布版) 01.04.06-SNAPSHOT(发布后)【问题讨论】:
1) 所有依赖的版本都一样吗? 2)依赖的版本和工件的版本一样吗? 添加 1. 不。根据项目,不同版本有 1 到 10 个不同的依赖项 添加 2. 不。有不同 你应该检查versions-maven-pugin... 正如我所说:我知道 maven-versions-plugin:use-latest/next-snapshot 但它对我不起作用。 现在我使用解决方法:1.mvn updates:use-release -Dincludes=my.packages.* versions:commit
2.mvn -B -Dusername=xxx -Dpassword=xxx -DreleaseVersion=04.05.39 -DdevelopmentVersion=04.05.40-SNAPSHOT release:clean release:prepare release:perform -Dresume=false
(我正在更改版本号) 3.mvn -B versions:use-next-snapshots -DallowSnapshots=true -Dincludes=my.packages.*
步骤 nr 3 不起作用。我不知道为什么。使用我在步骤 3 中发布的示例,我想将版本从 01.04.05 更改为 01.04.06-SNAPSHOT(此快照版本存在于我的快照工件中)。
【参考方案1】:
谢谢 Hilikus 的回答。
回答我的问题:从 SNAPSHOT 设置依赖项仅在交互模式下存在。使用发布插件无法在批处理模式下执行此操作。
解决方案是在版本插件旁边使用发布插件,如下所示:
-
mvn -B 更新:使用-发布 -Dincludes=my.packages.* 版本:提交
git 提交
mvn -B -Dusername=xxx -Dpassword=xxx -DreleaseVersion=04.05.39 -DdevelopmentVersion=04.05.40-SNAPSHOT release:clean release:prepare release:perform -Dresume=false
mvn -B 版本:use-next-version -DallowSnapshots=true -Dincludes=my.packages.* 版本:提交
git 提交
git 推送
将依赖关系更改为 SNAPSHOT 并将其发布到快照工件是在提交作业 (Jenkins) 之后完成的。
将有 4 次提交到 git,但工作将完成。 由于我的版本格式错误(1.1.1 的 01.01.01 - PM 不允许我更改它......)我需要使用 use-next-version 并将快照允许设置为 true。在 use-next-snapshot 中有 NumberFormatException。 项目版本将在使用发布插件时更改为 SNAPSHOT,而依赖项将在提交作业后更改为 SNAPSHOT。
【讨论】:
由于 maven 1.0-alpha-3,updates:use-release
现在是 versions:use-releases
【参考方案2】:
没有简单的方法可以做到这一点。困难在于您的每个工件都有不同的版本。发布插件更适合发布具有相同生命周期的工件。
现在,如果您可以使它们具有相同的生命周期,那么您需要做的是创建一个多模块项目并从根 pom.xml 发布。这种情况下的技巧是,由于所有模块及其依赖项都具有相同的版本,因此您应该只在<parent>
部分中指定版本以将其向下传递,并在<dependency>
部分中使用版本$project.version
。这样你就可以一起发布所有东西,发布插件不需要更改依赖版本,因为它已经是一个变量。
如果工件没有相同的生命周期,那么另一种选择仍然是创建一个多模块项目并以交互模式发布(即不是来自 jenkins 或构建服务器),在这种情况下,只要所有工件都在同一个reactor,发布插件会向你查询每个子模块的版本。
最后,如果您不能进行交互式发布,那么我认为有一种方法可以通过提供 artifactId 和每个模块的版本来在命令行中指定所有子模块的版本,但我在文档。如果您想进一步研究它,我会提到它
在所有情况下,如果您将项目配置为multi module project,您将有更大的成功机会
【讨论】:
以上是关于以批处理模式发布 - 将依赖项版本更改为 SNAPSHOTS的主要内容,如果未能解决你的问题,请参考以下文章