尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Maven超全核心知识点详解(多模块、继承、聚合、依赖、踩坑总结)

发布时间:2026/9/24 17:08:37

资讯中心
01
ARTICLE

Maven超全核心知识点详解(多模块、继承、聚合、依赖、踩坑总结)

Maven超全核心知识点详解(多模块、继承、聚合、依赖、踩坑总结)
前言在SpringBoot企业开发中几乎所有中大型项目都会采用Maven多模块架构。很多新手极易混淆Maven父工程、子模块、继承、聚合、模块依赖、打包规则同时会遇到循环依赖、找不到jar、IDEA模块不折叠、Gradle/Maven命令混用等经典报错。本文结合实战场景从零梳理Maven全套核心知识点区分所有易混淆概念同时解决日常开发90%的Maven报错问题适合零基础学习、面试背诵、项目复盘。一、Maven三种打包类型核心基础Maven工程的打包类型由packaging标签决定默认值为jar三种常用类型用途完全不同1. jar默认普通Java/SpringBoot业务模块打包方式生成可被其他项目依赖的jar包用于业务开发、功能实现。2. pom专门用于Maven多模块父工程核心特性不编译代码、不生成jar包仅生成pom描述文件只负责统一管理配置、统一版本、聚合子模块父工程必须设置packagingpom/packaging才能实现多模块管理3. war传统web项目打包方式现代SpringBoot项目基本不再使用。重点结论父工程也是标准Maven工程只是打包类型为pom无业务代码、无打包产物仅做配置和调度。二、dependencyManagement 版本管理机制核心dependencyManagement是Maven实现统一依赖版本的核心也是多模块项目必备配置。1. 核心作用仅声明并锁定依赖版本不会自动引入依赖、不会下载jar包属于「备案不生效」。2. 使用规则父工程中统一声明依赖版本子模块需要该依赖时只需写groupId、artifactId无需写version自动继承父工程锁定版本子模块可手动指定version子版本优先级高于父版本可覆盖子模块不声明dependency则不会引入该依赖按需加载3. 与直接dependencies的区别dependencyManagement统一版本、按需引入推荐多模块父工程使用dependencies全局强制引入所有子模块自动继承依赖冗余严重父工程禁止使用三、Maven 继承parent机制继承是子模块主动复用父工程配置的机制核心标签parent写在子模块pom.xml中。1. 继承可复用的内容统一的项目版本、groupIdproperties配置JDK版本、自定义变量dependencyManagement 依赖版本pluginManagement 插件版本2. 实战规范SpringBoot多模块父工程继承SpringBoot官方父spring-boot-starter-parent统一SpringBoot版本子模块只继承自定义父工程不再重复继承官方父避免版本混乱3. 如何检验继承是否生效看pom文件子模块存在正确的parent标签指向自定义父工程代码测试子模块引入父管理的依赖不写version不报错即为继承成功命令校验执行mvn help:effective-pom查看合并后的完整pom配置四、Maven 聚合modules机制聚合是父工程统一管理子模块、批量构建项目的机制核心标签modules写在父工程pom.xml中。1. 核心作用在父工程目录执行Maven命令clean、package、install自动按顺序批量构建所有子模块实现一键构建整个项目。2. 配置规则module标签内填写子模块文件夹名称不是artifactId聚合仅控制构建顺序和批量构建不会传递任何配置、不会继承版本配置聚合后IDEA侧边栏子模块会折叠缩进在父工程下方五、重点辨析继承 VS 聚合面试高频这是Maven最易混淆的两个概念完全独立、互不绑定对比项继承parent聚合modules书写位置子模块pom父工程pom核心目的复用配置、统一依赖版本批量构建、统一管理子模块依赖关系子找父主动继承父收子被动收纳IDEA表现不影响模块折叠子模块缩进在父下方构建作用不控制构建顺序定义子模块构建顺序四种组合场景继承聚合企业标准复用配置批量构建推荐使用仅继承、无聚合新手常见子模块能继承版本但无法批量构建侧边栏不折叠仅聚合、无继承可批量构建但子模块无法统一版本极少使用无继承无聚合完全独立项目无任何关联六、子模块分类SpringBoot多模块规范多模块项目中子模块分为两类用途和配置完全不同1. 普通Java模块公共模块作用存放实体类、工具类、常量、公共方法仅被其他模块依赖不独立启动配置无需启动类、无需spring-boot-maven-plugin插件打包普通jar包非可执行胖jar2. SpringBoot业务模块服务模块作用独立Web服务可单独启动运行、对外提供接口配置必须有启动类、配置spring-boot-maven-plugin打包插件打包可执行胖jar支持java -jar运行七、模块依赖 VS 继承/聚合终极区分很多新手混淆三者一句话彻底分清继承拿父的配置、版本只复用配置聚合父批量打包所有子模块只管构建模块依赖A模块依赖B模块调用对方代码、类、方法核心禁忌Maven模块依赖绝对不能循环A→B→C→A会直接构建失败八、经典报错踩坑总结实战必看1. Could not find artifact 找不到jar包根本原因模块循环依赖Maven无法确定构建顺序所有模块都无法生成jar包导致依赖找不到。解决方案抽取公共代码到common模块切断模块循环依赖。2. Gradle build报错原因Maven项目误用Gradle命令/点击Gradle构建按钮。解决Maven项目全程使用mvn命令不要操作Gradle功能。3. 新建模块需要手动Load Maven Project原因手动创建模块文件夹IDEA未自动识别Maven项目。解决必须点击Load加载否则依赖全部失效、代码报红推荐使用IDEA右键New Module方式新建模块自动加载、自动配置聚合。4. 子模块无法折叠在父工程下方原因仅有继承、无聚合父pom未配置对应module标签。解决在父工程modules中添加对应子模块文件夹名刷新Maven即可。九、SpringBoot多模块标准架构最终规范父工程packagingpom继承spring-boot-starter-parent配置dependencyManagement统一版本、modules聚合子模块删除src源码目录无业务代码、无打包插件。公共模块common普通Maven模块继承父工程存放公共代码不启动、无打包插件。业务模块SpringBoot模块继承自定义父工程配置启动类和打包插件依赖common模块独立运行。模块规则业务模块禁止互相依赖所有公共能力下沉到common彻底杜绝循环依赖。十、核心知识点背诵总结pom打包的父工程不生成jar、不编译代码仅做配置管理和聚合构建。dependencyManagement只锁版本、不引依赖子模块按需引入、省略version。继承是子复用父配置聚合是父管理子构建二者独立互不影响。模块依赖用于代码调用禁止循环依赖否则项目构建失败。SpringBoot多模块父管版本聚合、common管公共代码、业务模块独立运行。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。