我正在尝试自动发布相互依赖的项目。这是场景。我有两个项目:A 和 B。项目 B 依赖于项目 A。以下是自动化过程中需要执行的步骤:
- 使用 maven-release-plugin 发布项目 A。(我知道该怎么做)。这是我定义的目标序列: release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform
将项目 A 的最新 SNAPSHOT 版本部署到存储库。(使用简单的部署是有效的。但是有一个小问题,我已经在下面描述了。)
在进行完整发布之前,将项目 B 中的项目 A 的 SNAPSHOT 依赖版本更新为最新的发布版本。为了实现这一点,我在项目 B 的 POM 文件中设置了这样的准备目标(clean verify versions:use-latest-versions versions:commit )。
一切似乎都很好。
现在我想要的是,一旦发布完成,项目 B 中的项目 A 依赖于发布期间由release:prepare插件设置的最新 SNAPSHOT 版本。
我想出的解决方案是在release:perform执行后立即为项目 A SNAPSHOT进行maven 部署。(项目 A 的新目标顺序: release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform clean install deploy)
然后,我可以在项目 B 的发布周期结束时执行versions:use-next-snapshots 。(项目 B 的新目标顺序:release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform versions:use-next-snapshots)。在这里,我确实将我的版本插件限制为仅处理项目 A 依赖项。
问题是当我执行项目 A 的目标时,Maven 使用旧版本而不是增量版本部署 SNAPSHOT。因此,如果项目 A 发布之前的版本是1.1-SNAPSHOT。发布后的版本现在是1.2-SNAPSHOT。发布版本将是1.1。但是,部署的项目 A 快照版本是1.1-SNAPSHOT 而不是1.2-SNAPSHOT。
我猜在执行 maven-release-plugin 目标后,maven 不会更新内存中的 pom。