项目下有多个模块,每个模块有pom文件,是怎么继承的

非常棒的问题,这说明你已经进入了 Maven 多模块项目(Multi-Module Project) 的核心阶段。

这是企业级 Java 项目中最常见、最规范的结构之一,比如 Spring、MyBatis、Hutool 自身都这样组织。


🧩 一、整体概念

在多模块项目中:

  • 顶层有一个 父项目(parent project)
  • 下面有多个 子模块(modules)
  • 每个模块都有自己的 pom.xml
  • 子模块通过 <parent> 标签 继承父 pom

简单理解:

父 pom 负责 统一管理版本、依赖、插件

子模块只关心自己的业务逻辑和额外依赖


🏗️ 二、典型目录结构

text 复制代码
my-project/                     ← 根项目(父模块)
│
├── pom.xml                     ← 父 pom(管理统一配置)
│
├── bird-api/                   ← 子模块 1
│   └── pom.xml
│
├── bird-service/               ← 子模块 2
│   └── pom.xml
│
└── bird-common/                ← 子模块 3(公共工具包)
    └── pom.xml

🧱 三、父 pom.xml(根项目)

父项目一般只包含统一配置,不写 Java 代码。

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
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 父模块的坐标 -->
    <groupId>com.example</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>bird-common</module>
        <module>bird-service</module>
        <module>bird-api</module>
    </modules>

    <!-- 统一的依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.8.26</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 通用属性 -->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

📌 注意:

  • packaging 必须是 pom
  • modules 标签中列出所有子模块文件夹名
  • 不在父 pom 中放业务代码

🧩 四、子模块的 pom.xml(继承父 pom)

示例:bird-service/pom.xml

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
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 继承父项目 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>my-project</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>bird-service</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <!-- 从父 dependencyManagement 中继承 hutool 版本 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>

        <!-- 依赖本地模块 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>bird-common</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

</project>

🧩 五、依赖传递与版本管理

项目层级 内容 是否继承
<dependencies> 声明依赖 ❌ 不自动继承
<dependencyManagement> 管理版本号 ✅ 子模块继承(但需显式声明依赖)
<properties> 公共属性(如版本号) ✅ 子模块继承
<build> 编译配置 ✅ 子模块继承

⚙️ 六、构建方式

在父项目根目录执行:

bash 复制代码
mvn clean install

Maven 会:

  1. 先构建父模块
  2. 再依次构建子模块
  3. 自动处理依赖顺序(例如 bird-service 依赖 bird-common)

🌳 七、示意关系图

复制代码
my-project (父pom)
├── bird-common      ← 工具类模块
├── bird-service     ← 业务逻辑层(依赖 common)
└── bird-api         ← 接口层(依赖 service)

✅ 八、总结要点

项目角色 说明
父 pom 统一管理版本、插件、属性
子 pom 继承父 pom,声明自身依赖
<dependencyManagement> 管理但不引入依赖
<modules> 声明子模块路径
mvn install 会构建所有模块,保证依赖顺序

相关推荐
qq_12498707536 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计
大学生资源网6 小时前
java毕业设计之“知语”花卉销售网站的设计与实现源码(源代码+文档)
java·mysql·毕业设计·源码·springboot
小鸡脚来咯6 小时前
Redis三大问题:穿透、击穿、雪崩(实战解析)
java·spring·mybatis
桦说编程6 小时前
并发编程高级技巧:运行时检测死锁,告别死锁焦虑
java·后端·性能优化
jiayong236 小时前
Spring AI Alibaba 深度解析(三):实战示例与最佳实践
java·人工智能·spring
梁同学与Android6 小时前
Android ---【经验篇】ArrayList vs CopyOnWriteArrayList 核心区别,怎么选择?
android·java·开发语言
ss2737 小时前
从零实现线程池:自定义线程池的工作线程设计与实现
java·开发语言·jvm
苗壮.7 小时前
CommandLineRunner 是什么?
java
石工记7 小时前
windows 10直接安装多个JDK
java·开发语言
菜鸟233号7 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode