跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Maven 高级特性:继承、聚合与私服配置

Maven 高级部分主要涵盖分模块设计、继承与聚合机制以及私服配置。分模块设计可按功能或层级拆分项目以方便管理维护。继承通过 parent 标签简化依赖配置并统一版本,支持 dependencyManagement 进行版本锁定及 properties 属性集中管理。聚合通过 modules 标签实现多模块一键构建。私服作为局域网内的远程仓库,代理中央仓库解决团队资源共享与同步问题,区分 RELEASE 发布版与 SNAPSHOT 快照版。

雪落无声发布于 2026/4/5更新于 2026/7/1449 浏览

Maven 是一款构建和管理 Java 项目的工具。

1 分模块设计与开发

文章配图

文章配图

分模块设计就是将项目按照功能或结构拆分成若干个子模块,方便项目的管理维护、拓展,也方便模块间的相互调用和资源共享。

  1. 策略一:按照功能模块拆分,比如:公共组件、商品模块、搜索模块、购物车模块、订单模块等。
  2. 策略二:按层拆分,比如:公共组件、实体类、控制层、业务层、数据访问层。
  3. 策略三:按照功能模块 + 层拆分。

文章配图

示例:

文章配图

注意:分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。

2 继承与聚合

在案例项目分模块开发之后,我们会看到 tlias-pojo、tlias-utils、tlias-web-management 中都引入了一个依赖 lombok 的依赖。我们在三个模块中分别配置了一次。

文章配图

若需要修改版本,则需要每一个都去修改,非常的繁琐。Maven 的继承用来解决这个问题。

2.1 继承(简化依赖配置、统一管理依赖版本)

2.1.1 继承关系

创建一个父工程 tlias-parent,然后让上述的三个模块 tlias-pojo、tlias-utils、tlias-web-management 都来继承这个父工程。然后再将各个模块中都共有的依赖,都提取到父工程 tlias-parent 中进行配置。

文章配图

作用:简化依赖配置、统一管理依赖。

<parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <relativePath>....</relativePath>
</parent>

Maven 不支持多继承,一个 Maven 项目只能继承一个父工程。如果 tlias-web-management 继承了 spring-boot-starter-parent,就没法继承我们自己定义的父工程 tlias-parent 了。

解决:自己创建的三个模块,都继承 tlias-parent,而 tlias-parent 再继承 spring-boot-starter-parent,就可以了。

文章配图

Maven 打包方式: jar:普通模块打包,SpringBoot 项目基本都是 jar 包(内嵌 Tomcat 运行)。 war:普通 Web 程序打包,需要部署在外部的 Tomcat 服务器中运行。 pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理。

创建 Maven 模块 tlias-parent,该工程为父工程,设置打包方式 pom(默认 jar)。

Maven 的继承关系实现步骤:

在父工程中配置各个工程的共有依赖。

文章配图

在子工程中配置继承关系。 注意: ①在子工程中,配置了继承关系之后,坐标中的 groupId 是可以省略的,因为会自动继承父工程的。 ②relativePath 指定父工程的 pom 文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)。其中../代表的上一级目录。 ③若父子工程都配置了同一个依赖的不同版本,以子工程的为准。

文章配图

创建父工程,设置打包方式为 pom。并继承 spring-boot-starter-parent。

文章配图

工程结构说明:

实际项目中,可能还会见到下面的工程结构:tlias-parent, tlias-pojo, tlias-utils, tlias-web-management

而在真实的企业开发中,都是先设计好模块之后,再开始创建模块,开发项目。那此时呢,一般都会先创建父工程 tlias-parent,然后将创建的各个子模块,都放在父工程 parent 下面。这样层级结构会更加清晰一些。

2.1.2 版本锁定

问题:如果项目拆分的模块比较多,每一次更换版本,我们都得找到这个项目中的每一个模块,一个一个的更改。很容易就会出现,遗漏掉一个模块,忘记更换版本的情况。那我们又该如何来解决这个问题,如何来统一管理各个依赖的版本呢?

答案:Maven 的版本锁定功能。

在 Maven 中,可以在父工程的 pom 文件中通过 <dependencyManagement> 来统一管理依赖版本。

  • 父工程:在父工程中所配置的 <dependencyManagement> 只能统一管理依赖版本,并不会将这个依赖直接引入进来。这点和 <dependencies> 是不同的。
<!--统一管理依赖版本-->
<dependencyManagement>
    <dependencies>
        <!--JWT 令牌-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 子工程:子工程要使用这个依赖,还是需要引入的,只是此时就无需指定 <version> 版本号了,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
<dependencies>
    <!--JWT 令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
    </dependency>
</dependencies>
2.1.3 属性配置

通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。

文章配图

文章配图

文章配图

面试题: 与 的区别是什么?

<dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。 <dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖 (无需指定版本)。

2.2 聚合 (快速构建项目,在父工程/聚合工程中配置聚合的模块)

我们的项目被拆分为多个模块,而模块之间的关系错综复杂。

文章配图

tlias-web-management 模块的父工程是 tlias-parent,该模块又依赖了 tlias-pojo、tlias-utils 模块。那此时,在进行 tlias-web-management 模块打包时,Maven 会从本地仓库中来查找 tlias-parent 父工程,以及它所依赖的模块 tlias-pojo、tlias-utils,而本地仓库目前是没有这几个依赖的。

所以,在打包 tlias-web-management 模块前,需要将 tlias-parent、tlias-pojo、tlias-utils 分别执行 install 生命周期安装到 Maven 的本地仓库,然后再针对于 tlias-web-management 模块执行 package 进行打包操作。

如果开发一个大型项目,拆分的模块很多,模块之间的依赖关系错综复杂,那此时要进行项目的打包、安装操作,是非常繁琐的。

Maven 的聚合就是来解决这个问题的,通过 Maven 的聚合就可以轻松实现项目的一键构建(清理、编译、测试、打包、安装等)。

  • 聚合:将多个模块组织成一个整体,同时进行项目的构建。
  • 聚合工程:一个不具有业务功能的'空'工程(有且仅有一个 pom 文件)【PS:一般来说,继承关系中的父工程与聚合关系中的聚合工程是同一个】
  • 作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
<!--聚合哪些模块-->
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

此时,Maven 面板也会发生改变,只剩下 tlias-parent 这个父工程。

文章配图

那此时,我们要进行编译、打包、安装操作,就无需在每一个模块上操作了。只需要在聚合工程上,统一进行操作就可以了。

文章配图

Maven 中继承与聚合的联系与区别?

联系:继承与聚合都属于设计型模块,打包方式都为 pom,常将两种关系制作到同一个 pom 文件中。

区别:继承用于简化依赖配置、统一管理依赖版本,是在子工程中配置继承关系。聚合用于快速构建项目,是在父工程(聚合工程)中配置聚合的模块。

3 私服

文章配图

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

依赖查找顺序:本地仓库 ~ 私服仓库 ~ 中央仓库

注意事项:私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。

私服仓库说明:

  • RELEASE:存储自己开发的 RELEASE 发布版本的资源。
  • SNAPSHOT:存储自己开发的 SNAPSHOT 发布版本的资源。
  • Central:存储的是从中央仓库下载下来的依赖。

项目版本说明:

  • RELEASE(发布版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的 RELEASE 仓库中。
  • SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的 SNAPSHOT 仓库中。

文章配图

目录

  1. 1 分模块设计与开发
  2. 2 继承与聚合
  3. 2.1 继承(简化依赖配置、统一管理依赖版本)
  4. 2.1.1 继承关系 <parent>
  5. 2.1.2 版本锁定 <dependencyManagement> <properties>
  6. 2.1.3 属性配置
  7. 2.2 聚合 <modules>(快速构建项目,在父工程/聚合工程中配置聚合的模块)
  8. 3 私服
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 面试高频考点:模块、装饰器与异步编程详解
  • JavaScript 数组核心方法详解
  • C++ std::map 容器详解:键值对存储与操作
  • Web 虚拟卡销售平台架构设计与核心实现
  • 机器人 DH 参数模型与正运动学
  • JavaScript Document 对象常用属性详解
  • C++ string 类常用成员函数与全局函数解析
  • Java Map 与 Set 数据结构解析
  • Gazebo 机器人三维物理仿真平台详解
  • Java 高性能开发实战:Redis 7 持久化机制详解
  • Java 核心基础:深入理解 Spring IoC 容器与依赖注入
  • C语言算法练习:从两数之和到寻找峰值
  • AI 绘画技术解析与商业化变现实战指南
  • Python 函数核心概念与实战指南
  • Python+Matplotlib 大数据可视化高效解决方案
  • Node.js + uni-app 运动健康 App 计算机毕业设计
  • StructBERT-Large 实战教程:单句对多句批量检索模式扩展开发指南
  • OpenClaw 架构原理与实战部署指南
  • Vue3 + Python 体育赛事发布与在线购票选座系统设计
  • DeepSeek 结合通义万相实现 AI 视频高效制作

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online