我们是一家拥有约2000个独立Java项目的大型公司。由于历史原因,我们没有多模块项目,但我们想介绍它们。
从逻辑上讲,我们已经有了“团体”项目,即负责(例如)50个密切相关项目的人。这个人定期发布一份BOM,其中包含这50个项目的近期连贯版本。
现在抓住这50个项目并将它们放入一个大型多模块项目中会很有意义。但是,有必要发布BOM,因为其他项目(我们组之外)应该具有连贯的版本。
因此,总结一下,我们需要一个BOM,其中包含属于多模块项目的所有50个项目的版本。我想知道创建这样一个BOM的“Maven方式”是什么。我能想到的是:
什么是可取的?
答案 0 :(得分:4)
我从未见过2K商业Java项目,所以我的答案将基于开源的工作方式:
jackson-databind
,jackson-datatype-jsr310
等。这些图书馆与每个图书馆紧密相关,可能相互依赖。独立项目现在可以依赖于来自相同或不同组的库,但由于组内的版本相同,因此很容易将其设置为属性一次。可替换地:
<scope>import</scope>
,它允许从其他POM文件导入<dependencyManagement>
部分,例如组内的父POM(出于某种原因从未为我工作过)。答案 1 :(得分:4)
我们正在为多模块项目使用BOM,但我们并没有将它们的生成或更新与这些模块的构建联系起来。
只有在我们的发布管理流程完成内置模块(或模块组)的交付时才会更新BOM:一旦交付,BOM就会更新并推送到Nexus(存储为1.0-SNAPSHOT版本,不断被覆盖)每次交货后)
然后将BOM包含在我们的POM中(用于单模块或多模块项目)并仅用于依赖关系管理,这意味着我们的项目依赖于工件而不用版本:来自BOM的依赖关系管理提供其他相关模块的最新交付版本。换句话说,我们将构建方面(在这里与maven一起完成)与发布部分分开:“材料清单”代表已经交付的内容,并确保所有项目都在构建与被认为一起工作良好的版本(因为它们已经一起投入生产)。