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

相关推荐
b***666117 分钟前
Spring Boot 整合 Apollo 配置中心实战
java·spring boot·后端
CoderYanger32 分钟前
递归、搜索与回溯-综合练习:27.黄金矿工
java·算法·leetcode·深度优先·1024程序员节
v***Y8937 分钟前
linux 设置tomcat开机启动
linux·运维·tomcat
vx_vxbs661 小时前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
张较瘦_1 小时前
Springboot3 | ResponseEntity 完全使用教程
java·springboot·开发
毕设源码-郭学长1 小时前
【开题答辩全过程】以 高校兼职系统为例,包含答辩的问题和答案
java·spring boot
黄嚯嚯1 小时前
Jackson 多态反序列化详解:基于字段自动选择子类的优雅方案
java
h***38181 小时前
SpringBoot - Cookie & Session 用户登录及登录状态保持功能实现
java·spring boot·后端
一只乔哇噻1 小时前
java后端工程师+AI大模型进修ing(研一版‖day57)
java·开发语言·人工智能·算法·语言模型
十五喵1 小时前
智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧物业管理系统