`
juvenshun
  • 浏览: 1596964 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

按需构建多模块,玩转Maven反应堆

阅读更多

在多模块Maven项目中,反应堆(Reactor)是一个包含了所有需要构建模块的抽象概念,对于Maven用户来说,主要关心的是两点:

 

  1. 哪些模块会被包含到反应堆中?
  2. 反应堆中所有模块的构建顺序是什么?

 

例如有这样的一个多模块项目:

 

 

plexus-security包含了8个子模块,其中security-realms还包括了更进一层的两个子模块。

运行mvn clean install可以看到这样的输出:

 

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Plexus Security Aggregator
[INFO] Security: Parent
[INFO] Security: Model
[INFO] Security: XML Model
[INFO] Security: Configuration
[INFO] Security: System
[INFO] Security: Realms Parent
[INFO] Plexus XML Realm
[INFO] Security: REST API
[INFO] Plexus URL Realm
[INFO] Security Legacy Adapter
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------

 

在默认情况下,Maven会根据多模块配置构建所有的模块,Maven还会根据模块间的依赖关系自动计算构建顺序,以确保被依赖的模块会先得以构建。值得一提的是,在这种情形下,Maven会将父模块看成是其子模块的依赖,因此该例中Security Parent会较先得以构建。

 

一般来说,我们要么构建整个项目,要么构建单个模块,但是有些时候,我们会想要仅仅构建这个完整的反应堆中的某些模块,换句话说,我们会需要裁剪反应堆。

例如说,我对模块security-configuration做了一些更改,而我知道在完整反应堆顺序中,security-model-xml和security-model在其之前,不会依赖它,因此就没必要构建他们。我们只需要构建security-configuration及其之后的项目。

 

Maven提供了很多命令行选项让我们自定义反应堆,输入mvn -h可以看到这样一些选项:

 

Options:
 -am,--also-make                        If project list is specified, also
                                        build projects required by the
                                        list
 -amd,--also-make-dependents            If project list is specified, also
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects. A project
                                        can be specified by
                                        [groupId]:artifactId or by its
                                        relative path.
 -rf,--resume-from <arg>                Resume reactor from specified
                                        project
 

 

--resume-from 表示从该模块恢复,也就是说选择从哪里开始构建,等于剪掉了完整反应堆的前面一部分。

例如我运行 mvn clean install -rf security-configuration/ ,就会得到这样的一个反应堆:

 

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Security: Configuration
[INFO] Security: System
[INFO] Security: Realms Parent
[INFO] Plexus XML Realm
[INFO] Security: REST API
[INFO] Plexus URL Realm
[INFO] Security Legacy Adapter
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
  

与完整反应堆相比,前面的四个模块不见了,只保留了security-system及其之后的模块。

 

--projects 表示手动选择需要构建的项目,项目间以逗号分隔。

例如我运行 mvn clean install -pl security-configuration/,security-realms/security-xml-realm/,会得到如下反应堆:

 

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Security: Configuration
[INFO] Plexus XML Realm
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------

 

--also-make 的前提是--projects参数,表示同时构建所列模块依赖的其他模块。

例如我运行 mvn clean install -pl security-model-xml/ -am,会得到如下反应堆:

 

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Security: Parent
[INFO] Security: Model
[INFO] Security: XML Model
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------

 

 

这里security-model-xml依赖于security-model,而security-parent是security-model-xml的父项目,因此这两个模块都会得以构建。

 

--also-make-dependents 的前提是--projects参数,表示同时构建那些依赖于所列模块的模块。

例如我运行 mvn clean install -pl security-model-xml/ -amd,会得到如下反应堆:

 

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Security: XML Model
[INFO] Plexus XML Realm
[INFO] Security: REST API
[INFO] Plexus URL Realm
[INFO] Security Legacy Adapter
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
 

 

除了security-model-xml本身,所有其他依赖于该模块的模块也会被加入到反应堆中。

 

除此之外,在-pl、-am或者-pl、-amd的基础上,还能应用-rf参数,紧接着上面的例子,再加上参数-rf -rf security-rest-api/,

如:mvn clean install -pl security-model-xml/ -amd -rf security-rest-api/,便可以得到如下的反应堆:

 

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Security: REST API
[INFO] Plexus URL Realm
[INFO] Security Legacy Adapter
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------

 

 

这个反应堆表示:计算所有security-model-xml及依赖于它的模块,在次基础上,从security-rest-api模块开始构建。

 

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

 

最后提一下,Maven从2.1版本才加入了此功能。 :)

31
2
分享到:
评论
4 楼 u010835702 2016-12-01  
谢谢您,非常赞
3 楼 sunshine_bean 2015-09-11  
赞一个
2 楼 haha1903 2011-03-10  
真的非常实用,谢谢!
出错后,不需要再从头来一次了,呵呵。
1 楼 dearshor 2010-01-10  
受教了 .

相关推荐

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    FIB English learning

    FIB English learning

    linux下 jq 截取json文件信息

    X86-jq安装包

    [AB PLC例程源码][MMS_046356]SELX.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    大圣挪车小程序1.3.5+前端.zip

    大圣挪车小程序1.3.5 前端

    Manus.im 产品及开发团队研究报告.pdf

    Manus.im 产品及开发团队研究报告.pdf

    [AB PLC例程源码][MMS_044663]Control daisy chain wiring in Fieldbus Foundation.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    sun_3ck_01a_0918.pdf

    sun_3ck_01a_0918

    支持适用于PERC H330/H730/H730P/H830/H730P系列RAID卡MX/FD33xD/FD33xS控制器的驱动安装指南

    下载 1. 单击“立即下载”,以下载该文件。 2. 出现“文件下载”窗口后,单击“保存”,以将文件保存到硬盘。 安装 1. 浏览至文件下载目标位置并双击新下载的文件。 2. 仔细阅读对话窗口中显示的发布信息。 3. 下载并安装对话窗口中标识的任何必备项,然后再继续。 4. 单击“Install”(安装)按钮。 5. 按照其余提示执行更新。 安装 1. 将解压的文件复制到可访问Windows的介质。 2. 将系统重新引导至Windows操作系统。 3. 打开“服务器管理器”->“设备管理器”->“存储控制器”,然后单击“PERC控制器”。 5. 单击“更新驱动程序软件”,并按照提示更新驱动程序。 4. 重新引导系统以使更改生效。

    硬盘安装器,支持硬盘安装,无需制作U盘PE!

    支持所有操作系统一键安装。

    matlab程序代码项目案例:使用 Simulink 进行自适应 MPC 设计

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044098]1769-ASCII Simultaneous Mode.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    swanson_01_1106.pdf

    swanson_01_1106

    [AB PLC例程源码][MMS_047811]SAF1 - Store.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043879]Programming in SFC and ST Language.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    sun_3ck_01_0919.pdf

    sun_3ck_01_0919

    方言距离数据.岭南学院产业与区域经济研究中心

    各城市方言距离数据-中山大学岭南学院产业与区域经济研究中心 方言距离是指两种或多种方言之间的相似程度或差异程度。参考中山大学岭南学院产业与区域经济研究中心的刘毓芸等(2015)文献。他们基于方言树图,并参考《汉语方言大词典》和《中国语言地图集》对方言的划分,将汉语方言从宽泛到具体分为以下几个层级:汉语→方言大区→方言区→方言片。为了量化县与县之间的方言差异,他们采用了一种赋值方法: 若它们分属不同方言大区,则距离为3。: 若两个县同属一个方言片,则它们之间的方言距离为0; 若两个县属于同一方言区但不同方言片,则距离为1; 若它们属于同一方言大区但不同方言区,则距离为2; 方言距离是一个反映方言之间相似程度或差异程度的重要指标,它在语音识别、方言研究等领域具有广泛的应用价值。 参考文献:[1]刘毓芸, 徐现祥, 肖泽凯. 2015. 劳动力跨方言流动的倒U型模式[J]. 经济研究, 50(10): 134-146+162. 指标 语系、语族、方言大区、方言区/语支、方言片/语种、Supergroup、Dialect、group、Sub-dialect、groupPref_1、Pref_2、DiaDist、PrefCode_1、PrefCode_2等等。

    基于PCA算法的人脸识别MATLAB源码

    基于PCA算法的人脸识别MATLAB源码

    [AB PLC例程源码][MMS_045740]Handling manual movement of axis using an Add On Instruction (AOI), .zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lim_3ck_01a_0518.pdf

    lim_3ck_01a_0518

Global site tag (gtag.js) - Google Analytics