Maven 父 POM(或超级 POM)用于构建项目,以避免使用pom 文件之间的继承产生冗余或重复配置。它有助于长期轻松维护。
目录
Parent POM 内容
Parent POM 和 Child POM
Parent POM 相对路径
Demo
父 POM 内容
可以使用包装声明父 POM pom。它并不打算分发,因为它仅从其他项目中引用。
Maven 父 pom 可以包含几乎所有内容,并且可以继承到子 pom 文件中,例如
- 通用数据——开发者姓名、单片机地址、分销管理等。
- 常量——例如版本号
- 共同的依赖关系——所有孩子共同的。它与在单独的 pom 文件中多次写入它们具有相同的效果。
- 属性——例如插件、声明、执行和 ID。
- 配置
- 资源
父 POM 和子 POM 示例
为了匹配父 POM,Maven 使用两个规则:
- 在项目的根目录或给定的相对路径中有一个 pom 文件。
- 来自子 POM 文件的参考包含与父 POM 文件中所述相同的坐标。
父 POM
这里父POM已经为JUnit和spring框架配置了基本的项目信息和两个依赖。
<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.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标签和指定groupId/artifactId/version属性来引用父 POM。这个 pom 文件将从父 POM 继承所有属性和依赖项,并且还可以包含额外的子项目特定依赖项。
<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/maven-v4_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>
|
父 POM 相对路径
默认情况下,Maven 首先在项目的根目录中查找父 POM,然后是本地存储库,最后是远程存储库。如果父 POM 文件不位于任何其他位置,则可以使用代码标记。此相对路径应相对于项目 root。
..,即当前项目的父目录下的 pom。
<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/maven-v4_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>
|
演示
让我们学习创建具有父子关系的 maven 项目。
1)创建Maven父项目
项目创建向导。

创建 Maven 项目向导
选择项目架构类型。

Maven 快速入门 Archtype
填写详细信息并创建项目。

创建 Maven 父项目
现在将包装从 jar 更改为 pom in pom.xml。
<packaging>jar</packaging> //previous
<packaging>pom</packaging> //New
|
此外,添加项目属性和依赖项。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
<spring.version>4.2.3.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>
|
2) 创建 Maven 子项目
就像您为父项目所做的那样,创建一个新的 Maven 项目。更改项目的具体细节,如名称等。

创建 Maven 子项目
pom.xml现在使用父引用更新子项目的文件。
<!--The identifier of the parent POM -->
<parent>
<groupId>com.howtodoinjava.demo</groupId>
<artifactId>MavenExamples</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
|
现在您可以自由使用父 pom 的元素,例如属性。您的子项目继承了父项目。要对此进行测试,只需从子项目的pom.xml.
现在检查它在 Java Build Path 中的库。您将在那里看到所有父级的依赖项。

子项目的Java构建路径
在评论部分给我你的问题。
快乐学习!!
1633

被折叠的 条评论
为什么被折叠?



