Maven-Maven反应堆

假设现在有四个模块,account-aggregator、account-parent、account-email、account-persist,account-aggregator作为聚合模块聚合了account-email模块和account-persist模块,account-parent为父模块,account-email模块和account-persist模块继承于它。

当前account-aggregator模块的聚合配置如下

构件account-aggregator会看到如下输出

上述输出告诉了我们反应堆的构件顺序,它们依次为account-aggregator、account-parent、account-email、account-persist。如果按照顺序读取POM文件,首先应该读到的是account-aggregator的POM,实际情况与预料的一致,可是接下来几个模块的构件次序显然与它们在聚合模块中的声明顺序不一致,account-parent跑到了account-email前面。

Maven构建时还会考虑模块之间的继承和依赖关系,account-email和account-persist依赖于account-parent,那么account-parent就必须先于另外两个模块构建。

实际的构建顺序是这样的:Maven按序读取POM,如果该POM没有依赖模块,那么就构建该模块,否则就先构建其依赖模块,如果该依赖还依赖于其他模块,则进一步先构建依赖的依赖。

所以,account-aggregator没有依赖模块,因此先构建它,接着到account-email,它依赖于account-parent模块,必须先构建account-parent,然后再构建account-email,最后到account-persist的时候,由于其依赖模块已经被构建,因此直接构建它。

模块间的依赖关系会将反应堆构建一个有向非循环图,各个模块是该图的节点,依赖关系构成了有向边。这个图不允许出现循环,因此,当出现模块A依赖于B,而B又依赖于B的情况,Maven就会报错。

----------------------------------裁剪反应堆-----------------------------------

一般来说,用户会选择构建整个项目或者选择构建单个模块,但有些时候,用户会想要仅仅构建完整反应堆中的某些个模块。换句话说,用户需要实时的裁剪反应堆。

Maven提供了很多的命令行选项支持裁剪反应堆。

-am 同时构建所列模块的依赖模块

-amd 同时构建依赖于所列模块的模块

-pl 构建指定的模块,模块间用都好分隔

-rf 从指定的模块回复反应堆

默认情况下从accont-aggrepator执行mvn clean install会得到如下完整的反应堆:

可以使用-pl选项指定构建某几个模块

$ mvn clean install -pl account-email,accoount-persist

得到的反应堆为:

使用-am选项可以同时构建所列模块的依赖模块

$mvn clean install -pl account-email -am

由于account-email依赖于account-parent,因此会得到如下反应堆:

使用-amd选项可以构建依赖于所列模块的模块

$mvn clean install -pl account-parent -amd

由于account-email和account-persist都依赖于account-parent,因此会得到如下反应堆:

使用-rf选项可以在完整的反应堆构建顺序基础上指定从哪个模块开始构建。

$mvn clean install -rf account-email,完整的反应堆构建顺序中,account-email位于第三,它之后只有account-persist,因此会得到如下裁剪反应堆:

最后,在-pl -am或者-pl -amd的基础上,还能应用-rf参数,以对裁剪后的反应堆再次裁剪

$mvn clean install -pl account-parent -amd -rf account-email

该命令中的-pl和-amd参数会裁剪出一个account-parent,account-email,account-persist的反应堆,在此基础上,-rf参数指定从account-email参数构建,因此会得到如下的反应堆:

在开发过程中,灵活运用上述四个参数,可以帮助我们跳过无需构建的模块,从而加速构建。在项目庞大,模块特别多的时候,这种效果就会异常明显。

出自《Maven实战》-许晓斌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值