1:父类 POM 的配置

  • 父 POM 通过 <modules> 声明子模块,并通过 <dependencyManagement> 管理依赖版本。

  • 子 POM 通过 <parent> 指定父 POM,继承父 POM 的配置。

  • 父子 POM 的连接方式是多模块项目的基础,能够有效管理依赖和配置,提高项目的可维护性。

  • 父类 POM 是一个聚合工程(packagingpom),它通过 <modules> 标签声明子模块,并通过 <dependencyManagement> 管理依赖版本。

  • <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.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
        <packaging>pom</packaging> <!-- 父项目必须是 pom 类型 -->
    
        <!-- 子模块声明 -->
        <modules>
            <module>module1</module>
            <module>module2</module>
        </modules>
    
        <!-- 依赖管理 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <version>2.6.13</version>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.24</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <!-- 通用配置 -->
        <properties>
            <java.version>1.8</java.version>
        </properties>
    </project>

2:子类 POM 的配置

        子类 POM 通过 <parent> 标签指定父 POM 的坐标(groupIdartifactIdversion),并继承父 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 指定父 POM -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath> <!-- 父 POM 的相对路径 -->
    </parent>

    <!-- 子模块基本信息 -->
    <artifactId>module1</artifactId>

    <!-- 子模块的依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>
</project>

3:父子 POM 的连接方式

3.1 父 POM 声明子模块

        在父 POM 中,使用 <modules> 标签声明子模块:

<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

3.2 子 POM 指定父 POM

        在子 POM 中,使用 <parent> 标签指定父 POM 的坐标:

<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath> <!-- 父 POM 的相对路径 -->
</parent>

3.3 依赖继承

        子模块可以继承父 POM 中 <dependencyManagement> 管理的依赖,无需指定版本号:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

4:父子 POM 的工作机制

  • 依赖管理:父 POM 通过 <dependencyManagement> 管理依赖版本,子模块继承这些依赖。

  • 配置继承:父 POM 中的 <properties><build> 等配置会被子模块继承。

  • 模块聚合:父 POM 通过 <modules> 聚合子模块,构建时会按照顺序构建所有子模块。


5:注意事项

1:父 POM 的 packaging 必须为 pom

<packaging>pom</packaging>

2:子模块的 <parent> 必须正确指定父 POM 的坐标

<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath>
</parent>

3:子模块的 <artifactId> 必须唯一:

        每个子模块的 artifactId 不能重复。

4:依赖版本管理:

        子模块继承父 POM 的依赖版本,如果需要覆盖版本,可以在子模块中显式指定。


总结

  • 父 POM 通过 <modules> 声明子模块,并通过 <dependencyManagement> 管理依赖版本。

  • 子 POM 通过 <parent> 指定父 POM,继承父 POM 的配置。

  • 父子 POM 的连接方式是多模块项目的基础,能够有效管理依赖和配置,提高项目的可维护性。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐