- 浏览: 1588558 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
payton321:
dao,util,servie,基础模块应该是maven项目, ...
Maven最佳实践:划分模块 -
AdrainHuang:
深有体会,我这边已经 给项目坑死了,依赖关系太复杂,基本没人敢 ...
Maven最佳实践:管理依赖 -
远方_张涛:
赞赞赞,生动有趣还说明问题
Maven最佳实践:版本管理 -
smartdog:
新的网站访问不了啊~~博主快更新
再见JavaEye -
smartdog:
言简意赅,厉害
Maven最佳实践:遵循约定
在多模块Maven项目中,反应堆(Reactor)是一个包含了所有需要构建模块的抽象概念,对于Maven用户来说,主要关心的是两点:
- 哪些模块会被包含到反应堆中?
- 反应堆中所有模块的构建顺序是什么?
例如有这样的一个多模块项目:
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] ------------------------------------------------------------------------
除此之外,在-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版本才加入了此功能。 :)
评论
出错后,不需要再从头来一次了,呵呵。
发表评论
-
我的书《Maven实战》
2010-11-12 13:09 69936我本来已经决定停止更新该博客了,但是为了推广下我的新书《Mav ... -
m2eclipse 0.10.0发布
2010-02-22 17:34 7953本文译自 http://www.sonatyp ... -
Maven仓库的布局
2009-12-14 08:54 11844注:本文节选自我正在 ... -
Maven3初窥
2009-11-10 16:28 20652Maven3的开发已经完成大半,本周末将发布alpha-3(T ... -
Nexus 1.4.0 发布
2009-10-29 17:22 6121新完成的用户故事: [ NEXUS-463] - ... -
archtype:generate出错?
2009-10-12 00:10 8088我们常常会使用mvn archet ... -
你最常用的构建和发布管理工具是什么?
2009-09-13 15:03 12918最近Eclipse社区进行了一项调查,关注社区如何使用Ecli ... -
策划编写《Maven实战》——初步目录
2009-09-09 03:42 81422010-08-27更新 关注 ... -
Maven最佳实践:持续集成
2009-08-21 17:14 0test -
Maven最佳实践:集成web容器
2009-08-21 17:13 0test -
《Maven权威指南》完整发布,带官方PDF
2009-07-06 00:45 673802010/04/29更新 :我已 ... -
Nexus Indexer 2.0:增量下载
2009-05-14 16:33 10209原文:http://www.sonatype.com/peop ... -
Maven最佳实践:版本管理
2009-04-29 00:04 124610什么是版本管理 首先,这里说的版本管理(version ma ... -
Maven最佳实践:Maven仓库
2009-04-01 17:42 110745什么是Maven仓库 在不用M ... -
Maven中央仓库的中国镜像
2009-03-31 22:53 45875(2011-01-27更新,由于私人原因,该镜像已关闭,在此致 ... -
Nexus入门指南(图文)
2009-03-15 23:07 147399Nexus介绍 Nexus 是Maven仓 ... -
“第十七章 编写插件” 发布
2009-03-09 17:16 3856又是漫长的一章内容,但如同本书的任何一章一样,由于原作者都是M ... -
Maven最佳实践:管理依赖
2009-02-23 16:50 28251"If I have seen further it ... -
m2e:为Eclipse引入Maven(下)
2009-02-04 16:19 30283译自:http://www.sonatype.co ... -
m2e:为Eclipse引入Maven(上)
2009-02-04 14:10 12680译自:http://www.sonatype.co ...
相关推荐
使用Maven构建多模块项目
Maven3实战笔记08——Maven反应堆。
使用maven构建多模块项目。在一个项目中使用多个模块的一个方法是将模块添加为依赖项,正常情况下,我们会添加一个外部模块作为依赖。但是,当模块是一个项目的一部分,并密切相关的时候,该项目应被构造为一个多...
maven构建多模块项目,参考:http://blog.csdn.net/xiejx618/article/details/19849035
Springboot整合dubbo构建maven多模块项目 - 集成 mybatis
maven-3.5.0多工程构建(spring4mvc分子项目) 使用maven构建多模块项目。在一个项目中使用多个模块的一个方法是将模块... maven maven3.5.0 多工程构建 spring4mvc 子项目 maven构建项目 多模块项目 maven构建WEB项目
所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块,multi-module)相互关联。 提供了一个简单的Maven多模块实例
基于maven构建的多模块ssm demo,里面含有阿里的一个setting文件;也欢迎大家关注我的个人博客:https://juejin.im/user/58fcc0768d6d810058965a06;一起学习
Springboot 多模块 maven 实例 亲测可运行 ···············
1.创建Maven项目构建多模块的Maven项目第一步需创建Maven父级项目,该项目负责聚合所有模块的内容,并进行编译、打包和发布工作。以下是创建Maven项目的具体步骤: 1.1. Maven环境配置配置M2_HOME和MAVEN_HOME,如下...
maven多模块项目使用jetty,详细看http://blog.csdn.net/xiejx618/article/details/49936541
在eclipse下构建maven项目,该项目由多个子模块组成。main-app是主项目, 其他项目构建在此项目下面
maven构建多模块项目,里面也包含spring data jpa的一个例子
NULL 博文链接:https://liuyunlong1229.iteye.com/blog/2262851
maven多模块项目,使用eclipse开发工具创建,有意可下载,没有解压密码
Maven多模块项目编译速度慢,下面我们来学习下优化的方法。 mvn clean package -T 4C -Dmaven.test.skip=true -Dmaven.compile.fork=true -T 4C 代表本机4个CPU内核都参与编译工程, -Dmaven.test.skip=true 代表...
认识Maven。Maven安装,Maven核心概念,约定配置,坐标和仓库,POM,依赖管理,构建的总结,聚合与继承的区别。的脑图
NULL 博文链接:https://yansxjl.iteye.com/blog/2333900
NULL 博文链接:https://hyanqing1.iteye.com/blog/979453
这是一个maven分模块的小demo,希望对大家有所帮助。如果有什么问题欢迎加关注私信。