Maven之——聚合与继承
1、 聚合
所谓聚合就是用一个pom.xml配置文件将一个或者多个项目关联起来、这样当我们执行聚合文件pom.xml的生命周期阶段的时候、他就会执行在聚合文件中指定聚合的所有项目的对应生命周期阶段。
包含聚合文件的是一个额外的模块、这个模块必须要有自己的POM文件、并切此聚合项目的POM的packaging必须是pom:
<modelVersion>4.0.0</modelVersion> <groupId>org.andy.items</groupId> <artifactId>scattered-items</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>items-thkinjava</module> </modules>
Scattered-items是一个聚合模块、包含具体的items-thkinjava项目。要注意的是:这里items-thkinjava是在scattered-items文件夹内的、如果items-thkinjava与scattered-items同级、则要写成:
<modelVersion>4.0.0</modelVersion> <groupId>org.andy.items</groupId> <artifactId>scattered-items</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>../items-thkinjava</module> </modules>
2、 继承
加入一个项目有多个模块、每个模块都有自己的依赖、并且模块之间的依赖有大量的重复、这样谁用谁的不但重复、还复杂、不利于后面的管理、也容易产生冲突。此时就可以抽象一个父类结构pom指定公共部分、以便统一管理。父 POM的配置一般放在项目根目录、或者建立一个额外的项目、包含多个项目、父pom的配置要注意的地方和继承一样、pom.xml中packaging类型也是pom。比如上面提到的scattered-items项目就是一个我用来存放所有平时练习的小项目的集合、每个小项目都是由maven构建的、每个小项目都有使用到单元测试、那么我就可以在scattered-items中配置一个pom.xml作为父POM:
<groupId>org.andy.items</groupId> <artifactId>scattered-items</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version>
可以发现这个并没有与继承有什么区别、就是少了一个<modules>标签。关键是子POM中比如items-thkinjava的pom.xml要指定继承的是哪个父POM:
<parent> <artifactId>scattered-items</artifactId> <groupId>org.andy.items</groupId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>items-thkinjava</artifactId>
最后一行是用来说明、当其继承的有父POM的时候、如果groupId、version与父类一样、就可以完全省略不写、这样他会默认的继承使用父POM的groupId、version两个属性值。
3、 可继承的POM元素
首先可以看一下maven的pom文件所包含的所有子元素以及他们的意义:http://maven.apache.org/ref/3.2.3/maven-model/maven.html
具体如下、并附上简单说明:
groupId |
项目组的id |
version |
项目版本 |
Decription |
项目的描述信息 |
Organization |
项目的组织信息 |
Inception Year |
项目的创始年份 |
url |
项目的url地址 |
Developers |
项目的开发者信息 |
Contributors |
项目的贡献者信息 |
distributionManagement |
项目的部署配置信息 |
issueManagement |
项目的缺陷跟踪信息 |
ciManagement |
项目的持续集成系统信息 |
Scm |
项目的版本控制系统信息 |
mailingLists |
项目的邮件列表信息 |
Properties |
自定义的maven属性 |
Dependencies |
项目的依赖配置 |
dependencyManagement |
项目的依赖管理配置 |
Repositories |
项目的仓库配置 |
Build |
包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等 |
reporting |
包括项目报告输出目录的配置、报告插件配置等。 |
具体的想知道元素的配置方式以及表示的意义、可以查看上面给的网址。