T-aggregator/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>org.wzh.maven</groupId> 6 <artifactId>T-aggregator</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>pom</packaging> 9 <name>T-aggregator</name> 10 <modules> 11 <module>T-A</module> 12 <module>T-B</module> 13 <modele>T-parent</modules> 14 </modules> 15 16 </project>
T-paraent/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 4 <modelVersion>4.0.0</modelVersion> 5 <groupId>org.wzh.maven</groupId> 6 <artifactId>T-parent</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>pom</packaging> 9 <name>T-Parent</name> 10 11 </project>
T-A/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <parent> 6 <groupId>org.wzh.maven</groupId> 7 <artifactId>T-parent</artifactId> 8 <version>0.0.2-SNAPSHOT</version> 9 <relativePath>../T-parent/pom.xml</relativePath> 10 </parent> 11 12 <artifactId>T-A</artifactId> 13 <name>T-A</name> 14 15 <properties> 16 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 17 </properties> 18 19 <dependencies> 20 <dependency> 21 <groupId>junit</groupId> 22 <artifactId>junit</artifactId> 23 <version>3.8.1</version> 24 <scope>test</scope> 25 </dependency> 26 </dependencies> 27 </project>
T-B/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>org.wzh.maven</groupId> 6 <artifactId>T-B</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 <name>T-B</name> 10 11 <properties> 12 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 13 </properties> 14 15 <dependencies> 16 <dependency> 17 <groupId>junit</groupId> 18 <artifactId>junit</artifactId> 19 <version>3.8.1</version> 20 <scope>test</scope> 21 </dependency> 22 </dependencies> 23 </project>
由此可知,T-A 确实继承了 T-paraent 的 POM。
需要特别注意的是,父 POM 的 <packaging> 必须为 pom。
由于父模块只是为了帮助消除配置的重复,因此它本身不包含除 POM 之外的项目文件,也就不需要 src/main/java/ 之类的文件夹了。
其他模块如果需要继承父模块,则需要在 POM 中声明父模块。
<paraent> 下的子元素 <groupId> 、 <artifactId> 和 <version> 指定了父模块的坐标,这三个元素是必须的。
<relativePath> 表示父 POM 的位置。默认值是 ../pom.xml。也就是说,Maven 默认父 POM 在上一层目录下。
对于 <artifactId> ,子模块应该显式声明。
POM 可被继承的元素:
- groupId:项目组 ID,项目坐标的核心元素
- version:项目版本,项目坐标的核心元素
- description:项目的描述信息
- organization:项目的组织信息
- inceptionYear:项目的创始年份
- url:项目的 URL 地址
- developers:项目的开发者信息
- contributors:项目的贡献者信息
- distributionManagement:项目的部署配置
- issueManagement:项目的缺陷跟踪系统信息
- ciManagement:项目的持续集成系统信息
- scm:项目的版本控制系统信息
- mailingLists:项目的邮件列表信息
- properties:自定义的 Maven 属性
- dependencies:项目的依赖配置
- dependencyManagement:项目的依赖管理配置
- repositories:项目的仓库配置
- build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
- reporting:包括项目的报告输出目录配置、报告插件配置等