以批处理模式发布 - 将依赖项版本更改为 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的主要内容,如果未能解决你的问题,请参考以下文章

十六进制编辑 dll 以更改依赖项名称?

如何将 Firebase 和 Snap Creative Kit 作为 Gradle 依赖项包含在内

如何将对话框项的样式更改为测试模式下出现的样式?

覆盖 npm 包依赖

发布版本依赖于 MFC 的调试 dll

无法执行菜单项(内部错误)[异常] - 将 PHP 版本从 5.3.1 更改为 5.2.9 时