目录
1. 继承&聚合实战
创建一个maven项目,右击创建Module模块,可以创建子模块。子模块继承顶层项目,顶层项目由子模块聚合而成。
1.1 pom规则
- 将父POM的packaging更改为值“ pom”。
- 在父POM中指定其模块的目录(子POM)module
- 在每个子POM中指定其父POM是谁。 parent
<!-- 父pom -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wy</groupId>
<artifactId>dubbo-demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dubbo-demo-api</module>
<module>dubbo-demo-provider</module>
<module>dubbo-demo-consumer</module>
</modules>
</project>
<!-- 子pom -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-demo</artifactId>
<groupId>com.wy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-demo-api</artifactId>
</project>
<!-- ......其余两个子模块大致相同,处理artifactId -->
2. 项目继承
类似与Java所有类都隐式地继承自Object,maven中所有模块都隐式继承自Super POM(http://maven.apache.org/ref/3-LATEST/maven-model-builder/super-pom.html),也可以在pom文件通过parent元素指定父模块,类似于java extends继承。
继承的目的也是为了复用,如果有多个Maven项目,并且它们都有相似的配置,则可以通过提取那些相似的配置放入一个父项目,并将多个Maven项目继承该父项目,这样一些公共配置能够应用于所有项目。
2.1 可继承的元素
- groupId and / or the version 组和版本 如上面的样例,子模块无需声明这两个元素
- dependencies 依赖 一般在父pom中声明dependencieManagement 下的dependencies
- resources 资源配置 如超级pom中声明了资源路径是${project.basedir}/src/main/resources
- plugin lists (including reports) 插件
- plugin executions with matching ids 插件绑定
- plugin configuration 插件配置
- developers and contributors 开发者
如super POM中(源码路径maven/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml)指定了以下元素,所以所有的maven项目有默认使用的插件版本
2.2 覆盖
可以通过在子模块pom文件中重写元素覆盖从父模块继承而来的配置。
3. 聚合
主要通过modules.module指定子模块,聚合主要是一个大项目可以划分层次或者其它划分方法 分为多个模块,每个模块间既可以项目独立,也可以加依赖。如一个web项目,我可以划分为web层、service层和dao层等等,每一层单独一个模块,每个模块有着自己独立的依赖,高层次模块可以依赖低层次模块,这样的项目更加清晰。最终可以打包成一个大项目。
3.1 父模块步骤
- 将父模块pom的 packaging 改为"pom".
<packaging>pom</packaging>
- 声明子模块的路径
<modules>
<module>dubbo-demo-api</module>
<module>dubbo-demo-provider</module>
<module>dubbo-demo-consumer</module>
</modules>