如何让Maven构建父模块下的所有嵌套子模块?
Maven三层结构下仅构建指定父模块子模块的解决办法
模块结构
grandparent -> parent -> child1 \ -> child2 \ --> child3 --> child4
问题
我要构建parent下的所有子模块(也就是child1和child2),试了mvn install --projects ":parent",结果只建了parent本身,没管它的子模块。直接跑mvn install会把所有模块都建了,不符合需求。现在只能手动枚举子模块:
mvn install --projects ":parent,:child1,:child2"
这个情况和常见的两层模块问题不一样:
- 这里是三层父项目结构
- 用
-am参数的话,因为child2依赖child3,会连带把child3也建了,超出我要的范围
解决方法
如果你用的是Maven 3.3.0及以上版本,直接用--include-child-modules(简写-plm)参数就行,它只会构建指定项目的直接子模块,不会触发依赖的其他模块:
mvn install --projects ":parent" --include-child-modules
或者简写:
mvn install -pl ":parent" -plm
要是你不需要构建parent本身,只想要它的子模块,要是子模块的坐标有规律(比如都是parent-xxx),可以用通配符:
mvn install --projects ":parent-*"
但如果子模块坐标就是:child1、:child2这种,通配符不好使,还是用--include-child-modules更靠谱。
注意
--include-child-modules只处理指定项目的直接子模块,不会递归更深层的模块- 要是你的Maven版本低于3.3.0,要么升级版本,要么继续用手动枚举的办法
内容的提问来源于stack exchange,提问作者joseph
相关产品推荐
相关产品推荐

