首页 技术 正文
技术 2022年11月12日
0 收藏 965 点赞 4,095 浏览 1936 个字

聚合

  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> 在完整的反应堆构建顺序基础上,从指定的模块开始构建
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295