登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Maven中的这些坑,99%的人不知道!
Maven中的这些坑,99%的人不知道!
[ 复制链接 ]
要燥
2025-9-26 11:36:49
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前言
最近经常遇到知识星球中的小伙伴,问我一些关于Maven的问题。
说实话,Maven在我们日常开发中,使用的频率非常高。
今天这篇文章跟大家总结一下,使用Maven时一些最常见的坑,希望对你会有所帮助。
1.Maven核心原理
1.1 坐标体系
坐标冲突案例
:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
httpclient</artifactId>
<version>1.0.0</version>
</dependency>
复制代码
现象
:NoSuchMethodError 随机出现,因类加载器加载了错误Jar
1.2 依赖传递
依赖解析流程:
传递规则
:
最短路径优先
:A→B→C→D(1.0) vs A→E→D(2.0) → 选择D(2.0)
第一声明优先
:先声明的依赖版本胜出
1.3 生命周期
关键特性
:
执行mvn install会自动触发从validate到install的所有阶段
插件绑定
:每个阶段由具体插件实现(如compile阶段绑定maven-compiler-plugin)
1.4 仓库体系
私服核心价值
:
缓存公共依赖 → 加速构建
托管内部二方包 → 安全隔离
控制依赖审批流 → 合规管控
2.Maven中最常见的坑
坑1:循环依赖
案例
:订单模块order依赖支付模块payment,而payment又反向依赖order
报错
:[ERROR] A cycle was detected in the dependency graph
解决方案
:
抽取公共层:order-api ← order-core & payment-core
依赖倒置
:
// 在payment模块定义接口
public interface PaymentService {
void pay(Order order); // 参数用Order接口
}
// order模块实现接口
public class OrderServiceImpl implements PaymentService {
// 实现逻辑
}
复制代码
坑2:依赖冲突
典型场景
:引入A、B两个组件
A依赖C:1.0
B依赖C:2.0
→ Maven按规则选择其一,导致另一方兼容性问题
定位工具
:
mvn dependency:tree -Dverbose
复制代码
输出:
[INFO] com.example:demo:jar:1.0
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.13:compile
[INFO] | \- commons-logging:commons-logging:jar:1.2:compile
[INFO] \- com.aliyun:oss-sdk:jar:2.0.0:compile
[INFO] \- commons-logging:commons-logging:jar:1.1.3:compile (版本冲突)
复制代码
强制统一版本
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</dependencyManagement>
复制代码
坑3:快照依赖
错误配置
:
<dependency>
<groupId>com.internal</groupId>
core-utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
复制代码
风险
:相同版本号可能对应不同内容,导致生产环境行为不一致
规范
:
生产发布
:必须使用RELEASE(如1.0.0)
内部联调
:使用SNAPSHOT但需配合持续集成
坑4:依赖范围错误
误用案例
:
<dependency>
<groupId>javax.servlet</groupId>
javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
</dependency>
复制代码
后果
:Tomcat中运行时抛出java.lang.ClassCastException(容器已提供该包)
范围对照表
:
Scope编译测试运行典型用例compile✓✓✓Spring Coreprovided✓✓✗Servlet APIruntime✗✓✓JDBC驱动test✗✓✗JUnit
坑5:资源过滤缺失
问题现象
:src/main/resources下的application.yml未替换变量:
db:
url: ${DB_URL} # 未被替换!
复制代码
修复方案
:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
复制代码
同时需在pom.xml中定义变量:
<properties>
<DB_URL>jdbc:mysql://localhost:3306/test</DB_URL>
</properties>
复制代码
坑6:插件版本过时
经典案例
:JDK 17+项目使用旧版编译器插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
复制代码
报错
:Fatal error compiling: invalid target release: 17
升级方案
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
复制代码
坑7:多模块构建顺序
错误结构
:
parent-pom
├── user-service
├── payment-service # 依赖order-service
└── order-service
复制代码
构建命令
:mvn clean install → 可能先构建payment-service失败
正确配置
:
<modules>
<module>order-service</module>
<module>payment-service</module>
<module>user-service</module>
</modules>
复制代码
坑8:本地仓库污染
故障场景
:mvn clean install成功,同事却失败
根源
:本地缓存了损坏的lastUpdated文件
清理方案
:
# 清除所有无效文件
find ~/.m2 -name "*.lastUpdated" -exec rm {} \;
# 强制重新下载
mvn clean install -U
复制代码
坑9:私服配置错误
慢如蜗牛的原因
:
中央仓库直连(国内访问慢)
镜像配置错误
优化配置
(settings.xml):
<mirrors>
<mirror>
<id>aliyun</id>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
复制代码
坑10:IDE与命令行行为不一致
典型分歧
:
Eclipse能编译,命令行失败 → .project与pom.xml不一致
IDEA运行正常,mvn test失败 → 测试资源未配置
统一方案
:
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
复制代码
3.企业级最佳实践
依赖管理黄金法则
严格父POM
:所有版本在父POM的中锁定
持续检查
:CI流水线加入依赖检查
mvn versions:display-dependency-updates
复制代码
公私分明
:
公开依赖 → 从阿里云镜像下载
内部依赖 → 私服管控
高可用构建架构
总结
能用
:会执行mvn clean install
会用
:理解生命周期、解决依赖冲突
善用
:
通过mvn dependency:analyze剔除无用依赖
使用archetype生成标准化项目
集成enforcer-plugin规范构建
Maven的本质不是工具约束,而是架构纪律
。
当你不再被构建失败打断思绪,当你的依赖树如水晶般透明,才算真正驯服了这只“构建巨兽”。
最后说一句(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下我的同名公众号:苏三说技术,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注公众号:【苏三说技术】,在公众号中回复:进大厂,可以免费获取我最近整理的10万字的面试宝典,好多小伙伴靠这个宝典拿到了多家大厂的offer。
本文收录于我的技术网站:http://www.susan.net.cn
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Maven
中的
这些
不知道
相关帖子
SQL中的CTE用法初步(Common Table Expression公共表表达式)
新人求职指南(2):大学参加这些竞赛,求职时直接“弯道超车”!
UEFI 中的杂项知识总结-Protocol Handle 机制的详细介绍
【人工智能时代】-带你秒懂Dify中的Chatflow和Workflow
别再说 WinForm 做的工业软件丑了!这些开源库让它颜值拉满、交互流畅
轻量化网络中的知识蒸馏技术
卷积基础知识(四)池化操作与卷积中的反向传播
postgreSQL 中的自定义操作符
我们提供了这些企业和开发者所需的热门技术栈教程
理解整数在计算机中的表示
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
SQL中的CTE用法初步(Common Table Expression公共表表达式)
1
633
尸酒岐
2025-12-05
安全
新人求职指南(2):大学参加这些竞赛,求职时直接“弯道超车”!
1
668
吕梓美
2025-12-09
业界
UEFI 中的杂项知识总结-Protocol Handle 机制的详细介绍
2
175
嗅叽
2025-12-10
业界
【人工智能时代】-带你秒懂Dify中的Chatflow和Workflow
1
329
账暴
2025-12-10
业界
别再说 WinForm 做的工业软件丑了!这些开源库让它颜值拉满、交互流畅
0
1000
嫁蝇
2025-12-11
科技
轻量化网络中的知识蒸馏技术
2
277
全阳霁
2025-12-11
业界
卷积基础知识(四)池化操作与卷积中的反向传播
0
193
闰咄阅
2025-12-11
业界
postgreSQL 中的自定义操作符
1
825
蔺堰
2025-12-13
安全
我们提供了这些企业和开发者所需的热门技术栈教程
0
97
佴莘莘
2025-12-13
业界
理解整数在计算机中的表示
0
471
懵径
2025-12-13
回复
(5)
赶塑坠
2025-10-10 16:37:16
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
全叶农
2025-11-1 06:22:35
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
热心回复!
铝缉惹
2025-11-5 02:24:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
靛尊
2025-11-7 17:37:21
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
骆贵
2025-11-30 22:59:02
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
程序
签约作者
程序园优秀签约作者
发帖
要燥
2025-11-30 22:59:02
关注
0
粉丝关注
19
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
354
LLM 工具调用的范式演进与认知模型集成
354
Requirements Engineering with AI for Con
340
【节点】[Adjustment-WhiteBalance节点]原
298
上海专业建筑维修服务解析:标准化流程如何
942
【分析式AI】-带你弄懂XGBoost模型
728
【分析式AI】-带你弄懂XGBoost模型
48
【分析式AI】-带你弄懂XGBoost模型
270
C语言之统计天数
237
如何使用DashVector的多向量检索
270
【分析式AI】-朴素贝叶斯算法模型
215
【分析式AI】-朴素贝叶斯算法模型
934
【睿擎派】EtherCAT总线之IO模块读写
587
python3.13 3.14 新特性 好好好
783
Python新利器:用uv轻松管理venv虚拟环境和
956
Open-AutoGLM项目衍生自研app测试思路
180
.Net-Avalonia学习笔记(目录)
435
PoloAPI 绘画接口全攻略:从参数详解到实战
145
剑指offer-50、数组中重复的数字
180
嫌 Google 的 TCREI 太复杂?RACE 会更适合
976
Spring Boot中HTTP请求参数转换和请求体JSO