【发布时间】:2012-10-02 06:59:23
【问题描述】:
我目前正在优化多模块 maven 项目的 maven 构建。该项目由大约 90 个 Maven 模块组成。一般来说,有一些交叉库构成核心,然后大约有 15 个“应用程序模块”构成整个应用程序(然后将其部署为 WAR)
现在通常整个项目都有一个主要版本“2.5”,所以当一个新的主要版本完成时,所有“应用程序模块”都具有相同的版本“2.5.0”。到目前为止,一切都很好。
如果某个模块存在需要修复或改进的错误,则应发布该“应用程序模块”的新版本。例如,模块 A 修复了一个错误,那么 A.jar 的版本应该是“2.5.1”,而其余的应该仍然是“2.5.0”。
父母(2.5.0-SNAPSHOT - 模块 A (2.5.1-SNAPSHOT) - 模块 B (2.5.0-SNAPSHOT) - 模块 C (2.5.2-SNAPSHOT) - War (2.5.3-SNAPSHOT)
我们决定在主 pom 中管理工件版本,因此我们不需要在发布一个模块后更新每个工件的依赖版本。
所以现在每当更新的“应用程序模块”准备就绪时,我们使用 maven 发布插件来执行该模块的发布(我们发布的是一个模块,而不是整个项目)。因此,假设我们在 2.5.4 版本中发布模块 A,导致 A.jar 被部署为 2.5.4 版本,并通过将模块代码更新为 2.5.5-SNAPSHOT 来完成。
完成此操作后,我们需要更新主 pom 中的版本,以便所有模块继续引用正确的版本。
感谢主 pom 的 dependencyManagement 部分,如果我构建 War 模块,它会自动选择模块 A 的新版本。
现在是棘手的部分:一旦所有模块都发布了,就应该发布新版本的 Web 应用程序。这应该包含所有未更改的模块以及刚刚发布的模块。我目前正在努力解决如何做到这一点。如果我依赖于父 poms 版本,则该版本将包含 SNAPSHOT 版本(所有一个版本增量都太高),这是我和发布插件不允许的。
解决这个困境的最佳方法是什么?
我有一个想法,将依赖管理外包给一个单独的 pom,然后使用“import”范围将其导入主 pom dependencyManagement。
这种情景是愚蠢的想法吗?是否有替代开发和维护这样的大型多模块应用程序的方法?简单地让所有版本同步并在整个项目上使用发布插件不是一种选择,因为应用程序很大并且客户端应用程序必须加载更新的模块版本。我们的一些客户的连接速度非常慢,因此每次推出所有模块都会让他们非常不高兴。
帮助不胜感激,
克里斯
【问题讨论】:
标签: maven release pom.xml release-management maven-release-plugin