从Maven Release插件 - Prepare a Release document开始,准备发布版将经历以下发布阶段:
-
检查源中没有未提交的更改
-
检查没有SNAPSHOT依赖项
-
将POM中的版本从x-SNAPSHOT更改为新版本(系统将提示您输入要使用的版本)
-
转换POM中的SCM信息以包括标记的最终目标
-
针对修改后的POM运行项目测试,以确认一切正常
-
提交修改后的POM
-
使用版本名称标记SCM中的代码(将提示)
-
将POM中的版本转换为新值y-SNAPSHOT(也会提示这些值)
-
提交修改后的POM
我的问题是:
有没有办法在批处理模式下为依赖项执行第8步?我知道如何使用参数(developmentVersion)将项目版本更改为SNAPSHOT,但我不知道如何更改依赖项 .
我用的时候
mvn release:准备发布:执行
maven告诉我,我的pom中有SNAPSHOT依赖项,我可以为它们提供发布和开发版本 . 但有没有办法以批处理模式提供它们?
我知道maven-versions-plugin:use-latest / next-snapshot但它不适合我 .
我的版本号流程应如下所示:
-
01.04.05-SNAPSHOT(发布前)
-
01.04.05(发布版)
-
01.04.06-SNAPSHOT(发布后)
2 回答
没有简单的方法可以做到这一点 . 困难来自于每个工件都有不同的版本 . 发布插件更适合发布具有相同生命周期的工件 .
现在,如果您可以使它们具有相同的生命周期,那么您需要做的是创建一个多模块项目并从根pom中释放 . 这种情况下的诀窍是,由于所有模块及其依赖项具有相同的版本,因此您只应在
<parent>
部分中指定版本以将其涓滴化,并在<dependency>
部分中使用版本${project.version}
. 这样你可以将所有内容一起发布,发布插件不需要更改依赖项版本,因为它已经是一个变量 .如果工件没有相同的生命周期,那么另一个替代方案仍然是创建一个多模块项目并以交互模式释放(即不是来自jenkins或构建服务器),在这种情况下,只要所有工件都在同一个反应器中,release插件将查询每个子模块的版本 .
最后,如果您不能进行交互式发布,那么我认为有一种方法可以通过提供artifactId和每个模块的版本来在命令行中指定所有子模块的版本,但我无法在文档中找到该设置 . 我提到它以防你想进一步研究它
但是,在所有情况下,如果将项目配置为multi module project,您将有更好的成功机会
Thx Hilikus的回答 .
回答我的问题:从SNAPSHOT设置依赖项仅存在于交互模式 . 使用release插件无法在批处理模式下执行此操作 .
对此的解决方案是在版本插件旁边使用release插件,如下所示:
mvn -B updates:use-release -Dincludes = my.packages . * versions:commit
git commit
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 . * versions:commit
git commit
git push
将更改依赖关系更改为SNAPSHOT并将其释放到快照工件是在提交作业(Jenkins)之后完成的 .
将有4个提交git,但工作将完成 . 我错误的版本格式(01.01.01 insted of 1.1.1 - PM不允许我更改它...)我需要使用use-next-version,快照允许设置为true . 在use-next-snapshot中有NumberFormatException . 项目版本将在使用发布插件时更改为SNAPSHOT,并且依赖项将在提交作业后更改为SNAPSHOT .