聚合

  1. 聚合模块的<packaging>元素为pom
  2. 聚合模块通过<modules>元素标识自己的子模块,每个子模块对应了一个module元素
  3. module元素中指定的是子模块所在目录相对于聚合模块的POM文件的位置,

如果子模块与聚合模块的POM同级,则module元素应该是子模块所在的目录名

如果子模块与聚合模块同级,则module元素应是../子模块目录名

继承

  1. 子模块通过parent元素标识自己的父模块
  2. 子模块隐式地从父模块继承groupIdversion属性
  3. 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-pluginmaven-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——聚合与继承的更多相关文章

  1. maven项目的聚合与继承

    maven项目的聚合与继承: 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模 ...

  2. Maven学习总结——聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...

  3. maven 依赖、聚合和继承 (转)

    Maven 插件和仓库 Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,仅仅定义了抽象的生命周期,所有这些任务都交给插件来完成的.每个插件都能完成至少一个任务,每个任务即是一个功 ...

  4. maven学习(十一)——maven中的聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  5. Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性

    之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...

  6. (五)Maven中的聚合和继承

    一.为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我 ...

  7. (十四)Maven聚合与继承

    1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模块,比如common公共模块.system系统模块.log日志模块.reports统计模块.monitor监控模块等等.这时我们肯定会 ...

  8. Maven之 聚合与继承 详解

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  9. Maven详解之聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

随机推荐

  1. C++STL—string类

    string容器 1.1 string容器的基本概念 string容器是一个类 这个容器中有一个指针,指针维护了一个数组 string容器提供copy.find.insert.replace等等功能 ...

  2. 812考试总结(NOIP模拟37)[数列·数对·最小距离·真相]

    前言 考得挺憋屈的... 先是搞了两个半小时的 T1 后来发现假了,又没多想跳了.. 然后一看 T2 这不是队长快跑嘛... 先是根据自己的想法打了一遍(考完之后发现是对的..) 然后回想了一下之前的 ...

  3. OpenStack中VNC协议实现多屏共享(多屏不踢访问)

    OpenStack中VNC协议实现多屏共享 by 无若   libvirt设置基本说明:   <devices> <graphics type='sdl' display=':0.0 ...

  4. 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!

      最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Lambda表达式 Lambda表达式   Lambda 表达式,也可称为闭包,它是推动 Java 8 ...

  5. 精简ABP的模块依赖

    ABP的模块非常方便我们扩展自己的或使用ABP提供的模块功能,对于ABP自身提供的模块间的依赖关系想一探究竟,并且试着把不必要的模块拆掉,找到那部分核心模块.本次使用的是AspNetBoilerpla ...

  6. DVWA靶场之SQL injection(blind)通关

    盲注,顾名思义,无法从界面上直接查看到执行结果,一般的SQL注入基本绝迹,最多的就是盲注 基本步骤:(由于没有回显了,相比一般的SQL注入,也就不需要确定查询字段数.判断回显位置了) 判断注入类型 破 ...

  7. Xilinx约束学习笔记(一)—— 约束方法学

    <Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...

  8. COM笔记-Widows 注册表

    Widows 注册表 HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字.在CLSID关键字之下列有系统中安装的所有组件的CLSID.注册表CLSID是一个具有如下格式的 ...

  9. windows上解决git每次重复输入账号密码

    win7电脑: 1.在 C:\Users\Administrator 下 编辑 .gitconfig文件 2.在原有内容下添加一行(此行作用为自动保存,保存修改后再使用一次GIT,输入账号密码后下次即 ...

  10. Spring详解(八)------常用的连接池配置

    首先,我们准备Jdbc属性文件 jdbc.properties,用于保存连接数据库的信息,利于我们在配置文件中的使用 jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...