在一个多模块的 Maven 项目中,反应堆是指所有模块组成的一个构建结构。对于单模块的项目,反应堆就是该模块本身。但对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系,从而能够自动计算出合理的模块构建顺序。
模块间的依赖关系会将反应堆构成一个有向非循环图(Directed Acyclic Graph, DAG),各个模块是该图的节点,依赖关系构成了有向边。这个图不允许出现循环,因此,当出现模块 A 依赖于 B,而 B 又依赖于 A 的情况时,Maven 就会报错。
一般来说,用户会选择构建整个项目或者选择构建单个模块,但有些时候,用户会想要仅仅构建完整反应堆中的某些个模块。换句话说,用户需要实时地裁剪反应堆。
Maven 提供了很多的命令行选项支持裁剪反应堆,输入 mvn -h 可以看到这些选项:
可以使用 -pl 选项指定构建某几个模块
1 mvn clean install -pl moduleA,moduleB,...
使用 -am 选项可以同时构建所列模块的依赖模块
mvn clean install -pl moduleA -am
如果 moduleA 依赖了 moduleB,这里就会构建 moduleB 和 moduleA
使用 -amd 选项可以同时构建依赖于所列模块的模块
mvn clean install -pl moduleA -amd
如果 moduleB 和 moduleC 依赖于 moduleA,这里就会构建 moduleA,moduleB 和 moduleC
使用 -rf 选项可以在完整的反应堆构建顺序基础上指定从哪个模块开始构建
mvn clean install -rf moduleA
如果该完整的反应堆构建顺序中,moduleA 位于第三,那么就从moduleA 开始构建一直到最后的模块,moduleA 之前的模块不构建。
在 -pf -am 或者 -pl -amd 的基础上,还能应用 -rf 参数,以对裁剪后的反应堆再次裁剪。
mvn clean install -pl moduleA -amd -rf moduleB
如果 moduleB 和 moduleC 依赖于 moduleA,这里就会构建 moduleB 和 moduleC