核心内容摘要
计算机毕业设计java基于Vue的同城搬家系统 基于SpringBoot+Vue的同城搬家预约与服务平台设计 城市居民搬家需求与订单一体化管理系统的研发
谁说Maven只有枯燥的配置今天咱用“唠嗑式”教学把依赖冲突、依赖范围、项目聚合拆解得明明白白新手也能秒懂
依赖冲突Maven版“版本打架”怎么破咱先还原一个真实场景你开开心心配了两个Spring依赖结果项目启动就报错一看是spring-core版本不一致——一个
5.
8一个
5.
0俩版本“掐架”了为啥会冲突spring-context会间接依赖spring-core:
5.
8而spring-aop会间接依赖spring-core:
5.
0Maven蒙圈了“我该用哪个”别慌4大招教你摆平冲突
第一声明者优先拼顺序不拼手速Maven规则谁先在pom.xml里声明就优先用谁的依赖版本。
把想要的高版本spring-aop放前面spring-core就会跟着用
5.
2.
路径近者优先直接“钦点”核心依赖“路径近” 直接依赖 间接依赖。
与其等Maven猜不如直接声明spring-core一步到位
排除依赖把“捣乱”的依赖踢出去不想让spring-context带
5.
8的spring-core直接排除它的间接依赖眼不见心不烦
版本锁定一招锁死一劳永逸推荐这是企业开发最常用的方案——用dependencyManagement统一管理版本子依赖自动继承再也不打架
依赖范围别让依赖“乱串门”Maven给依赖分了“活动范围”不同范围的依赖只在指定阶段生效别配错了用一张表讲清楚附“人话翻译”依赖范围main/java编译test/java测试war包运行人话翻译compile默认✅✅✅全家桶选手编译、测试、运行都要它比如spring-contexttest❌✅❌测试专属只有写测试用例时才生效比如junitruntime❌✅✅运行才上线编译不用运行/测试要比如JDBC驱动provided✅✅❌服务器管饭编译/测试用运行时服务器自带比如servlet-api打包不进war 举个栗子junit必须配test不然编译主代码时会找不到junit纯纯浪费servlet-api配providedTomcat本身带了这个包打包进去会冲突纯属画蛇添足
拆分与聚合项目“分家”不分手项目做大了把dao、service、web全堆在一个工程里维护起来能把人逼疯Maven的“拆分聚合”专治这种混乱核心思路父工程统一管理子模块各司其职为啥要这么拆解耦改service代码不影响dao不用全量编译复用dao模块能被多个service引用统一管理父工程maven_parent集中下载/管理所有依赖版本子模块直接继承不用重复配版本。
举个父工程的核心配置子模块只需继承即可
总结依赖冲突优先用dependencyManagement版本锁定次之排除依赖/调整顺序直接引用兜底依赖范围记住4个核心范围的生效阶段test给测试包、provided给服务器自带包拆分聚合父工程做依赖管理子模块按功能拆分dao/service/web解耦又好维护。
评论区聊聊你踩过哪些Maven依赖的坑是怎么解决的