假设现在有四个模块,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实战》-许晓斌

Maven-Maven反应堆相关推荐

  1. Maven——Maven概述

    Maven概述 Maven是意第绪语,意为知识的积累,最初是为了简化Jakarta Turbine项目中的构建过程.有几个项目,每个项目都有自己的Ant构建文件,所有项目都略有不同.JAR已检入CVS ...

  2. Maven: maven parent.relativepath point at wrong local pom

    Maven: maven parent.relativepath point at wrong local pom 参考:https://blog.csdn.net/qwfys200/article/ ...

  3. Maven——Maven核心概念——史上最烂系列

    Maven 是目前最流行的自动化构建工具,对于生产环境下多框架.多模块整合开发有重要作用.Maven 是一款在大型项目开发过程中不可或缺的重要工具.(自己粗略写了一个SSM项目之后,回顾头来看这个,会 ...

  4. Maven裁剪反应堆

    文章目录 裁剪反应堆 -pl 构建指定模块 -pl -am 构建 -pl -amd 构建 裁剪反应堆 Maven提供了很多的命令来方便用户裁剪反应堆 -am, – also-make 同时构建所列模块 ...

  5. [maven]maven插件 tomcat7-maven-plugin 的使用

    使用 tomcat7-maven-plugin,可以将tomcat内嵌到web项目中,直接运行webapp项目. 第一步.pom.xml的配置: <build><plugins> ...

  6. maven 打包指定依赖包_[Maven]-Maven基础-01-基础概念

    Maven基础 1.基础概念 Maven基础概念 什么是Maven 什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准化的 什么是依赖?为什么要进行依赖管理? 自动下载,统一依赖管理 有哪 ...

  7. Maven : maven异常记录-must be unique maven duplicate declaration of version

    1.美图 2.背景 maven异常记录 INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountere ...

  8. [maven] maven

    1.maven个人配置文件讲解 1.setting.xml文件包含全局设置文件和个人设置文件,全局设置文件为maven安装目录下的文件,个人设置文件一般在一下目录 Unix/Mac OS X - ~/ ...

  9. Maven(Maven是干什么用)

    Maven项目对象模型(POM)是一个项目管理工具软件,可以通过简短的信息描述来管理项目的构造,报告和文档. 除了具有构建程序的功能外,Maven还提供了高级项目管理工具.由于Maven的默认构建规则 ...

  10. Maven — maven filtering OTS parsing error incorrect file size in WOFF head 产生原因及两种解决方案

    背景说明 前端静态资源文件放在后端SpringBoot项目resources文件夹下,多环境打包后前端页面出现了图标及文字未按预期样式显示的情况,查看浏览器控制台发现出现如下错误. OTS parsi ...

最新文章

  1. 当下全球最炙手可热的八位少年创业者
  2. 深入浅出学习Struts框架(八):分析Struts框架实例3
  3. 入门必看!给零基础新手的超快速色彩知识小科普
  4. 使用iOS手势UIGestureRecognizer
  5. ABAP的自学之路 ,初步认识ABAP 一
  6. Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效
  7. [html] 列举下哪些块元素里面不能放哪些块元素呢?
  8. 依赖型的关系建立 - 小技巧
  9. Altium Designer--如何走差分等长线
  10. modelsim使用第三方编辑器VS code
  11. 别总写代码,这130个网站比涨工资都重要
  12. mac 硬盘读写速度测试 软件,MAC硬盘速度测试技巧
  13. Appium安装手册详解
  14. 语聊房玩法解析,如何快速打造一款语音社交产品
  15. C语言实现简单的五子棋
  16. 分布式文件存储MinIO SeaweedFS FastDFS对比总结
  17. 微软账号被锁定后的记录历程(已永久封禁)
  18. 程序猿也爱学英语,有图有真相!
  19. BAT春晚发红包,A、T宕机3年,为啥2019年百度挺住了?
  20. 天境生物启动A股上市辅导:已实现盈利,臧敬五不再是主要股东?

热门文章

  1. CSS 与 地图可视化 三棱锥 (九)
  2. 将地质图(shp文件)叠加到天地图上
  3. 论文成功写作技巧之行之有效的写作从“结果”开始(上)
  4. 微信公众号拉取扫码功能
  5. split()方法的使用
  6. 2021-2025年中国智能电源插座行业市场供需与战略研究报告
  7. Retrofit + RxJava 的结合使用
  8. oppo r17听筒测试软件,扔掉工具尺子!OPPO R17 Pro实用功能到来:
  9. 动效icon怎么放到html,归纳一下icon动效的一些设计方法
  10. 基于STC89C52单片机的蔬菜大棚实时温度测量控制系统