项目下有多个模块,每个模块有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 会构建所有模块,保证依赖顺序

相关推荐
学习编程的Kitty2 小时前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
oak隔壁找我2 小时前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@2 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开2 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
Homeey2 小时前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL2 小时前
27.短链系统
java
Lisonseekpan3 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
CodeCraft Studio3 小时前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf
乐悠小码3 小时前
Java设计模式精讲---04原型模式
java·设计模式·原型模式