子pom使用<parent>
标签可以继承父pom的依赖、属性等内容,使POM文件之间的继承避免冗余或重复配置,如果在父POM和子POM中都配置了不同值的依赖项或属性,则子POM值将具有优先级。
父pom 几乎可以包含所有内容,并且可以将它们继承到子pom 文件中,例如
- 公共数据:开发人员的名称,SCM地址,分发管理等。
- 常量:比如版本号
- 共同依赖:对所有的孩子都是共同的。这与在单个pom文件中多次编写它们具有相同的效果。
- 属性:例如插件,声明,执行和id。
- 配置
- 资源
父POM
在下面的例子中,parent POM已经配置了基本的项目信息,以及JUnit和spring framework的两个依赖
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd;
<modelVersion>4.0.0</modelVersion>
<groupId>com.howtodoinjava.demo</groupId>
<artifactId>MavenExamples</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>MavenExamples Parent</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
<spring.version>4.3.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
子POM
子 POM 需要使用<parent>
标签引用父 POM,指定 groupId/artifactId/version 等属性。
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--The identifier of the parent POM-->
<parent>
<groupId>com.howtodoinjava.demo</groupId>
<artifactId>MavenExamples</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>MavenExamples</artifactId>
<name>MavenExamples Child POM</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-security</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
默认情况下,Maven 首先在项目的根目录中查找父 POM,然后是本地存储库,最后是远程存储库。如果父 POM 文件不在任何其他地方,那么你可以使用代码标签<relativePath>
此相对路径应相对于项目根目录
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--The identifier of the parent POM-->
<parent>
<groupId>com.howtodoinjava.demo</groupId>
<artifactId>MavenExamples</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../baseapp/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>MavenExamples</artifactId>
<name>MavenExamples Child POM</name>
<packaging>jar</packaging>
</project>