我目前正在优化一个多模块maven项目的maven版本。该项目由大约90个Maven模块组成。通常有一些交叉库构成核心,然后大约有15个“应用程序模块”组成整个应用程序(然后部署为WAR)创建多模块maven独立构建和发布各个模块?
现在一般情况下整个项目都有一个主版本“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) - 战争(2.5。 3-SNAPSHOT)< - 3在最后,因为C有2个重新发布和一个,并在每个模块发布后发布为简单起见
我们决定管理主pom中的神器版本,所以我们不在发布一个模块后,不需要更新每个artefact的依赖版本
所以现在每当更新的“应用程序模块”准备就绪时,我们使用maven释放插件来执行该模块的发布(我们正在发布一个模块,而不是整个项目)。假设我们在版本2.5.4中发布了模块A,导致A.jar被部署为版本2.5.4,并通过将模块代码更新为2.5.5-SNAPSHOT来完成。
完成此操作后,我们需要更新主POM中的版本,以便所有模块继续引用正确的版本。
感谢主POM的dependencyManagement部分,如果我建了战争模块,它会自动选择模块A.
现在到了棘手的部分新版本:只要所有模块被释放,应该发布新版本的Web应用程序。这应该包含所有未更改的模块以及刚刚发布的模块。我目前正在努力如何做到这一点。如果我依赖父poms版本,则发行版将包含SNAPSHOT版本(所有版本增量都过高),而我和发行版插件不允许。
什么是这种困境的最佳解决方案?
我有一个想法是将依赖管理外包给一个单独的pom,然后使用“import”作用域将其导入到主poms dependencyManagement中。
这种szenario是一个愚蠢的想法?是否有替代方案来开发和维护这样的大型多模块应用程序?由于应用程序很大,客户端应用程序必须加载更新的模块版本,因此只需要将所有版本同步并在整个项目中使用发布插件即可。我们的一些客户的连接速度非常慢,因此每次推出所有模块都会让他们真的很不高兴。
帮助非常感谢,
克里斯
嗨noahz, 感谢您的解释它帮助。我意识到,如果我的模块彼此之间不存在依赖关系,这将工作。不幸的是,他们这样做。我有另一个想法如何解决这个问题,并创建了一个新的答案(可以用这种方式编写多文本;-)) –