Maven 高级开发完整教程(上篇・分模块 + 继承聚合)
两大核心章节项目分模块拆分设计、Maven 继承与聚合两大核心关系完整讲解拆分策略、父子工程搭建、dependencyManagement 版本锁定、pom 打包类型区分配套完整 pom 代码、项目目录结构、实操步骤是企业多模块项目必备核心技能下篇讲解 Maven 私服完整配置、上传下载、settings 与 pom 全套配置实操。一、为什么需要 Maven 分模块开发1. 单体项目致命缺陷传统单工程所有代码写在同一个模块controller/service/mapper/pojo 全部放一个 src项目体量巨大文件繁杂多人开发冲突频繁通用实体、工具类无法复用每个新项目都要复制一份代码业务耦合严重修改一个功能容易影响全项目打包、编译速度缓慢微小改动也要编译全部代码。2. 分模块核心优势把大系统拆分为多个独立 Maven 子模块职责单一每个模块只负责一类功能代码清晰资源复用公共 pojo、工具类单独抽离所有业务模块直接依赖引入独立编译打包修改某一块代码仅编译对应模块开发效率提升团队协作友好不同开发人员负责不同模块代码冲突大幅减少按需拆分支持大型分布式商城、后台管理系统架构。二、三种主流分模块拆分策略策略 1按业务功能拆分电商项目常用按业务线划分独立模块示例商城项目mall-common公共工具、实体mall-goods商品业务mall-cart购物车mall-order订单mall-search搜索优点业务边界清晰大型分布式项目首选。策略 2按分层拆分小型后台系统按三层架构抽离模块tlias-pojo实体类tlias-mapper数据层tlias-service业务层tlias-controller控制层优点分层解耦适合简单后台管理系统。策略 3混合拆分企业最通用功能模块内部再分层兼顾业务与解耦例mall-goods-controller、mall-goods-service、公共 common 模块。标准实操案例目录后台管理系统 tliastlias-parent父/聚合工程 pom打包 ├─ tlias-pojo 存放所有实体类 ├─ tlias-utils 全局工具类JWT、文件工具 └─ tlias-web 主启动模块Controller启动类开发规范先规划模块结构再创建工程禁止写完单体项目再拆分后期拆分成本极高。模块依赖引用方式web 模块需要使用 pojo、utils 中的类直接在 tlias-web 的 pom 引入依赖dependency groupIdcom.itheima/groupId artifactIdtlias-pojo/artifactId version1.0-SNAPSHOT/version /dependency dependency groupIdcom.itheima/groupId artifactIdtlias-utils/artifactId version1.0-SNAPSHOT/version /dependency三、Maven 继承关系父子工程3.1 继承核心概念Maven 继承类似 Java 类继承创建父工程统一管理所有子模块公共依赖、版本号、全局配置子工程通过parent标签继承父工程所有配置。解决痛点多个子模块重复书写 lombok、mybatis、mysql 驱动等依赖版本不一致冲突。3.2 三种打包 packaging 类型区分jar普通业务模块pojo、utils、springboot 启动模块可打包 jar 运行war传统外置 Tomcat web 项目现在 SpringBoot 几乎不用pom父工程 / 聚合工程专用该模块无业务代码仅管理子模块依赖与构建不能打包业务 jar。3.3 完整搭建步骤创建父工程 tlias-parentpackaging 设置为 pom父工程 pom 核心配置?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 groupIdcom.itheima/groupId artifactIdtlias-parent/artifactId version1.0-SNAPSHOT/version !-- 父工程必须pom -- packagingpom/packaging !-- 继承SpringBoot官方父工程统一版本 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.10/version relativePath/ /parent /project创建子模块tlias-pojo、tlias-utils子 pom 配置继承父工程parent groupIdcom.itheima/groupId artifactIdtlias-parent/artifactId version1.0-SNAPSHOT/version !-- 指定父pom相对路径多模块IDEA自动识别 -- relativePath../tlias-parent/pom.xml/relativePath /project !-- 继承后groupId可省略自动沿用父工程groupId -- artifactIdtlias-pojo/artifactId version1.0-SNAPSHOT/version3.4 两种依赖管理方式核心面试点方式 1dependencies 直接继承父工程内写入 dependencies所有子模块自动全部引入该依赖无需子工程重复书写。适用全部模块都要用到的公共依赖lombok父 pomdependencies dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency /dependencies所有子模块直接使用 Lombok不用再写坐标。方式 2dependencyManagement 版本锁定企业标准仅统一管理依赖版本不会自动引入依赖子模块需要使用时自行声明坐标无需写 version。解决不同模块需要不同依赖统一管控版本避免版本混乱冲突。父工程配置properties jjwt.version0.9.1/jjwt.version /properties dependencyManagement dependencies dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version${jjwt.version}/version /dependency /dependencies /dependencyManagement子工程使用时无需指定 versiondependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId /dependency3.5 自定义 properties 统一版本父工程 properties 标签定义全局版本变量全项目复用统一修改一处即可升级版本properties lombok.version1.18.34/lombok.version mysql.version8.0.33/mysql /properties dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version${lombok.version}/version /dependency3.6 继承优先级规则如果父子工程同时引入同一个依赖、不同版本子工程版本优先覆盖父工程。四、Maven 聚合关系多模块一键构建4.1 聚合作用聚合工程一般和父工程为同一个 pom 类型模块通过modules标签管理所有子模块执行一次 package/install/deploy自动按依赖顺序构建全部子模块无需逐个编译打包。4.2 聚合配置语法写在父 pom 中!-- 聚合所有子模块 -- modules moduletlias-pojo/module moduletlias-utils/module moduletlias-web/module /modules4.3 聚合构建顺序规则Maven 自动分析模块依赖关系先编译被依赖模块再编译依赖模块例web 依赖 utils、pojo → 构建顺序pojo → utils → webmodules 标签书写顺序不影响实际构建顺序。4.4 继承与聚合的联系 区别相同点打包类型都为 pom通常合并到同一个父工程一套 pom 同时实现两种能力。核心区别继承解决依赖统一管理、消除重复坐标配置写在子工程 parent 标签聚合解决一键批量构建多模块配置写在父工程 modules 标签。五、上篇全文完整总结单体项目维护困难分模块拆分实现解耦、代码复用、提升开发效率三种拆分策略按业务、按分层、混合拆分开发前提前规划模块Maven 继承父工程 pom子工程 parent 标签继承统一公共依赖pom 三种打包jar 业务包、war 传统 web、pom 父 / 聚合专用dependencies 子模块自动继承dependencyManagement 仅锁定版本子按需引入properties 变量统一管理版本全局一处修改聚合modules实现一键构建全模块构建顺序由依赖自动决定继承管依赖聚合管批量构建二者常配合使用。上篇拓展实操练习创建 tlias-parent 父工程pom 打包并继承 SpringBoot 父新建 tlias-pojo、tlias-utils 两个子模块配置继承父工程用 dependencyManagement 统一 MyBatis、JWT 版本父添加 modules 聚合标签执行 package 一键打包所有模块。上篇面试高频考点单体项目和分模块项目优缺点jar/war/packaging 三种打包区别dependencies 与 dependencyManagement 核心区别4 Maven 继承和聚合分别作用二者联系区别5 多模块项目构建顺序由什么决定。