Maven专题2——聚合与继承
聚合
- 聚合模块的
<packaging>元素为pom - 聚合模块通过
<modules>元素标识自己的子模块,每个子模块对应了一个module元素 module元素中指定的是子模块所在目录相对于聚合模块的POM文件的位置,
如果子模块与聚合模块的POM同级,则
module元素应该是子模块所在的目录名
如果子模块与聚合模块同级,则module元素应是../子模块目录名
继承
- 子模块通过
parent元素标识自己的父模块 - 子模块隐式地从父模块继承
groupId和version属性 parent.relativePath元素是相对于子模块POM文件自身的位置
如果子模块与聚合模块的POM同级,则
relativePath元素应是../pom.xml或类似的路径。
示例:
parent-module
|
|----sub-module1
| |
| |----pom.xml
|
|----sub-module2
|----pom.xml
项目构建时,Maven会首先根据relativePath检查父POM,如果找不到,再从本地仓库查找。relativePath的默认值是../pom.xml。
可继承POM元素
- groupId
- version
- description:项目的描述信息
- organization:项目的组织信息
- inceptionYear:创始年份
- url:项目的URL地址
- developers:项目的开发者
- contributors:项目的贡献者
- distributionManagement:部署配置
- issueManagement:缺陷跟踪系统信息
- ciManagement:持续集成系统信息
- scm:版本控制系统信息
- mailingLists:邮件列表信息
- properties:自定义Maven属性
- dependencies:依赖
- dependencyManagement:依赖管理
- repositories:仓库配置
- build:源码目录配置、输出目录配置、插件配置、插件管理配置等
- reporting:报告输出目录配置、报告插件配置等
依赖管理
- 父模块的
dependencyManagement声明依赖而不实际引入依赖,父子模块的dependencies元素使用已声明的依赖时可以省略版本号 - 子模块如果通过
dependencies引入父模块声明的依赖,在引入时可以省略版本号,表示使用父模块中声明的版本 - 通过
import类型的依赖范围,可以将指定POM的dependencyManagement合并到当前POM的dependencyManagement中
示例
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xxx.yyy.zzz</groupId>
<artifactId>aaa-bbb-ccc</artifactId>
<version>m.n.p</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
插件管理
build.pluginManagement元素用来管理插件,作用同样是声明而不真实引入插件依赖- 好的风格是在父POM中配置通用插件,而在要使用指定插件的子POM中,通过
build.plugings.plugin元素实际引入,如果是父POM中已经声明的插件,子POM中无需指定版本和配置 - 如果是一些内置的插件,可以只在父POM中声明和配置,而无需再在子POM中引入,就可以对子模块的构建生效,如
maven-compiler-plugin、maven-resources-plugin等
超级POM
对于Maven 3而言,超级POM位于$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml。
超级POM定义了:
- 仓库
- 插件仓库
- 项目的主输出目录
- 主代码输出目录
- 最终构件的名称格式
- 测试代码输出目录
- 主源码目录
- 脚本源码目录
- 测试源码目录
- 主资源目录
- 测试资源目录
- 核心插件的版本号等
反应堆
- 反应堆指所有模块组成的一个构建结构,能够自动计算出合理的模块构建顺序
- 当反应堆中存在循环依赖时就会报错
- 可以使用以下
mvn命令选项来裁剪反应堆
-pl, --projects <arg> 只构建指定的模块,参数间使用逗号分隔
-am, --also-make 同时构建指定模块的依赖模块
-amd, --also-make-dependencies 同时构建所有依赖于指定模块的模块
-rf, --resume-from <arg> 在完整的反应堆构建顺序基础上,从指定的模块开始构建
Maven专题2——聚合与继承的更多相关文章
- maven项目的聚合与继承
maven项目的聚合与继承: 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模 ...
- Maven学习总结——聚合与继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...
- maven 依赖、聚合和继承 (转)
Maven 插件和仓库 Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,仅仅定义了抽象的生命周期,所有这些任务都交给插件来完成的.每个插件都能完成至少一个任务,每个任务即是一个功 ...
- maven学习(十一)——maven中的聚合与继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...
- Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性
之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...
- (五)Maven中的聚合和继承
一.为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我 ...
- (十四)Maven聚合与继承
1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模块,比如common公共模块.system系统模块.log日志模块.reports统计模块.monitor监控模块等等.这时我们肯定会 ...
- Maven之 聚合与继承 详解
说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...
- Maven详解之聚合与继承
说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...
随机推荐
- 1~n数字中1出现的个数
1~n数字中1出现的个数 LeetCode 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 感觉挺有意思 对于一个数,我们先局部分析一下,比如123456,我们考虑百位这个 ...
- 探讨UE4中的UBT和UHT
前言 UBT和UHT是编译工具,谁定义的呢,虚幻引擎自己定义的,拿来做什么呢,UBT和UHT是UE4用来简化多平台编译,去除用户自定义平台编译项目的操作 我们写的UE4代码不是标准的C++代码,是基于 ...
- setsockopt中参数之SO_REUSEADDR的意义
1.setsockopt中参数之SO_REUSEADDR的意义 1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSE ...
- redis中使用SCAN代替KEYS
前言 由于redis的keys命令是线上禁用,所以就有了SCAN.SSCAN.HSCAN和ZSCAN四个命令. 但是这四个命令也不是每次返回全部匹配结果,因此需要一遍遍执行下去,而且每次返回的curs ...
- beeline: 新版连接Hive server的工具
HiveServer2 支持一个新的命令行Shell,称为Beeline,它是基于SQLLine CLI的JDBC客户端.它是从 Hive 0.11版本引入的,是Hive新的命令行客户端工具.Hive ...
- WPF---样式(一)
一.概要 Style通俗的讲,就是一组Setter,设置目标控件的一些属性,便于复用. 注:如果一个属性在控件本身进行了设定,那么Style中的对应属性值会被覆盖掉. 二.命名样式和目标样式 命名样式 ...
- WPF---数据绑定(一)
一.何为数据绑定 场景:考虑一个Window上有一个TextBox和一个Slider两个元素,当我们拖动滑动条的时候,会在TextBox中显示当前滑动条的数值:当我们在TextBox中输入一个有效值, ...
- 七:使用Session进行会话管理
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- C# 计时器用法(DispatcherTimer、System.Timers.Timer、System.Threading.Timer)
首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程. Disp ...
- java包装类注意点
Integer one = new Integer(100); Integer two = new Integer(100); Integer three = 100; Integer fore = ...