Maven多项目深度

时间:2015-06-17 01:44:47

标签: maven

我试图用类似下面的分层形式构建Maven pom:

+ - A-POM

+ - B-POM

+ - C-POM

+ --- d-POM

我希望这可以解决我更改的模块问题。也就是说,如果C被改变,那么必须重建A等等。

但是我遇到的问题是,根本上的包装似乎是“pom”,之后我不能将A作为包装“战争”然后继续钻进来让A包括B,C作为其模块。在我看来,任何没有“pom”的POM都不能拥有子模块。我的理解是否正确?有办法做我想做的事吗?

此外,我似乎并不想将Maven中的“改变”机制联系起来(必须由于我缺乏知识)。我喜欢让Maven检测到一个依赖项目已经改变并重建所有受影响的项目。

非常感谢!

1 个答案:

答案 0 :(得分:1)

reactor项目(多模块项目的根目录)必须有pom包装。所以你的嵌套结构是无效的,因为A不是pom类型,我很确定你不会以这种方式工作。

第二点是Maven是一个模块化的构建系统,它使用存储库机制来定位预构建的工件,而不是从版本控制中检出所有模块,并像过去一样以单片方式构建它们;)这意味着Maven当你在模块上更改某些内容时,无法知道要重建什么,因为此时它没有简单的所有其他模块。

我认为这不仅仅是构建系统本身应该处理的CI任务。我知道您可以使用适当的构建/ CI服务器(如Jenkins)来支持上游和下游项目,从而实现这种行为。这意味着它能够检测项目之间的依赖关系,并在构建依赖关系后立即触发其他构建。这接近你想要实现的行为。

顺便说一下。只有SNAPSHOT依赖项才需要重建其他项目。带有maven插件的Jenkins支持这种行为,但是,根据项目的SNAPSHOT依赖项的数量,这可能会导致服务器上的长链项目构建。有些人认为,一般来说,SNAPSHOT版本对于CI任务来说都是地狱,因为这些工件可能会随着时间的推移而发生变化并且不可重现。您可以考虑完全省略SNAPSHOT版本并每次构建最终版本。这也可以避免在模块更改后立即重建其他模块的要求。在升级依赖项版本之前,根本没有任何更改。