反应堆是指所有模块组成的一个构建结构。对于单模块的项目,反应堆就是该模块本身,但是对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系。自动计算出合理的模块构建顺序。
模块间的依赖关系会将反应堆构成一个有向非循环图,各个模块是该图的节点,依赖关系构成了有相变。这个图不允许出现循环。例如之前的示例项目(各个模块之间无联系):
再来看一个复杂一点的:
如果出现了循环,Maven就会提示报错信息,这点不必担心。
裁剪反应堆
- -am --also-make同时构建所列模块的依赖模块
- -amd --also-make-dependents同时构建依赖于所列模块的模块
- -pl --projects
构建指定的模块,模块间用逗号分隔。 - -rf --resume-from
从指定的模块回复反应堆。
以上是可以支持裁剪反应堆的命令行。
使用-pl指定构建某几个模块,运行mvn clean install -pl hello-maven-web,hello-maven-server,得到反应堆:
C:\Subversion\MavenPrj\helloMaven>mvn clean install -pl hello-maven-web,hello-maven-server
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] hello-maven-server
[INFO] hello-maven-web
[INFO]
[INFO] ------------------------------------------------------------------------
使用-am可以同时构建所列模块的依赖模块,运行mvn claen install -pl hello-maven-web -am(web依赖于parent),得到反应堆:
C:\Subversion\MavenPrj\helloMaven>mvn claen install -pl hello-maven-web -am
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] parent
[INFO] hello-maven-web
[INFO]
[INFO] ------------------------------------------------------------------------
使用-amd可以同时构建依赖于所列模块的模块,运行mvn claen install -pl hello-maven-parent -amd,得到反应堆:
C:\Subversion\MavenPrj\helloMaven>mvn claen install -pl hello-maven-parent -amd
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] parent
[INFO] hello-maven-persist
[INFO] hello-maven-server
[INFO] hello-maven-web
[INFO]
[INFO] ------------------------------------------------------------------------
使用-rf可以在完整的反应堆构建顺序基础上指定从哪个模块开始构建,运行mvn clean install -rf hello-maven-server,得到反应堆:
C:\Subversion\MavenPrj\helloMaven>mvn clean install -rf hello-maven-server
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] hello-maven-server
[INFO] hello-maven-web
[INFO] Hello-Maven Aggregator
[INFO]
[INFO] ------------------------------------------------------------------------
同时可以结合使用这几个命令,运行mvn clean install -pl hello-maven-parent -amd -rf hello-maven-persist,可以裁剪出hello-maven-parent,hello-maven-persist,hello-maven-server,hello-maven-web的反应堆,在这个基础上,-rf指定从hello-maven-persist参数构建。
C:\Subversion\MavenPrj\helloMaven>mvn clean install -pl hello-maven-parent -amd -rf hello-maven-persist
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] hello-maven-persist
[INFO] hello-maven-server
[INFO] hello-maven-web
[INFO]
[INFO] ------------------------------------------------------------------------
原始的mvn clean install产生的反应堆为,可以对比一下:
C:\Subversion\MavenPrj\helloMaven>mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] parent
[INFO] hello-maven-persist
[INFO] hello-maven-server
[INFO] hello-maven-web
[INFO] Hello-Maven Aggregator
[INFO]
[INFO] ------------------------------------------------------------------------
在开发过程中,灵活应用上述4个参数,可以帮助我们跳过无须构建的模块,从而加速构建。在模块特别多的时候,这种效果会很明显的。