Mavan进阶之父子模块(继承)

Mavan进阶之父子模块(继承)_第1张图片

文章目录

    • Mavan 父子模块(继承)
      • 1. 父项目
      • 2. 子项目
      • 3. 父子项目的使用

Mavan 父子模块(继承)

继承」是 Maven 中很强大的一种功能,继承可以使得子 pom 可以获得 parent 中的各项配置,可以对子 pom 进行统一的配置和依赖管理。

简而言之,继承是为了抽取多个模块的公共配置,以实现统一/简化配置的目的。

父 pom 中的大多数元素都能被子 POM 继承。「除了以下元素外」,其它元素均可被子模块继承:

  • artifactId
  • name
  • prerequisites

1. 父项目

通常 Maven 的父项目是一个特殊项目,本质上「它是因为了复用配置而存在的项目」而并非一个实际意义上的真实的项目。

[✓] 注意
父项目的 类型是 pom 类型,既非 jar 类型,也非 war 类型。

父项目并不是一个真正的项目,因此父项目下完全不需要存在 java 包和 resources 包,父项目下只需要存在一个 pom.xml 文件,其它皆非必须。

2. 子项目

为一个子项目指定父项目只需要在其 pom.xml 中添加 元素即可。

<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.0modelVersion>
    <parent>
        <groupId>org.codehaus.mojogroupId>
        <artifactId>my-parentartifactId>
        <version>2.0version>
        <relativePath>注意,这里有所不同relativePath>
    parent>
    <artifactId>my-projectartifactId>
project>

元素用于指明本项目(子项目)的父项目的 pom 文件的路径名。例如:

  • …/pom.xml

    在硬盘上的目录层次结构中,子模块在父模块的『里面』。

  • …/parent-module/pom.xml

    在硬盘上的目录层次结构中,子模块和父模块『平级』。

  • Maven 就不关心子模块和父模块在硬盘上的目录层次结构。它要求父模块在本地仓库中存在。

如果完全没有 * 元素,等同于:../pom.xml ,即,子模块要在父模块『里面』。

[✓] 注意
子项目不一定非得新建在父项目内。所以,默认的 relativePath 的默认值 ../pom.xml 不一定总是对的。

3. 父子项目的使用

通常,让子项目重用父项目的配置,有 2 种表现形式:

  • 表现形式 1:父项目中定义 ,子项目「天然继承」了父项目的 ,从而不再需要引入这些依赖。

  • 表现形式 2:父项目通过配置 定义依赖包的版本,子项目不用则已,一旦使用这些包中的某个(或某些),则不再需要指定它们的版本信息。

另外,有 自然就有

整体结构(其它无关元素略)

project 
├── dependencyManagement
│   └── dependencies
│       ├── dependency
│       └── ...
└── build
    └── pluginManagement
        └── plugins
            ├── plugin
            └── ...

你可能感兴趣的:(#,maven-advance,maven,maven,java)