(XIII)反应堆 Reactor

反应堆是指所有模块组成的一个构建结构。对于单模块的项目,反应堆就是该模块本身,但是对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系。自动计算出合理的模块构建顺序。

模块间的依赖关系会将反应堆构成一个有向非循环图,各个模块是该图的节点,依赖关系构成了有相变。这个图不允许出现循环。例如之前的示例项目(各个模块之间无联系):

(XIII)反应堆 Reactor_第1张图片
hello-maven-web依赖关系.png

再来看一个复杂一点的:

(XIII)反应堆 Reactor_第2张图片
较复杂的依赖关系图.png

如果出现了循环,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个参数,可以帮助我们跳过无须构建的模块,从而加速构建。在模块特别多的时候,这种效果会很明显的。

你可能感兴趣的:((XIII)反应堆 Reactor)