Bootstrap

Maven 最全排包指南&maven包加载原理简述

引言

作为一名java开发,最烦的就是环境问题引起的故障,首先定位问题难,解决后一身疲惫,成就感弱,作为最常见的maven包冲突,本文总结两种排包过程思路,尤其推荐第二种,基本可解决所有的包冲突问题。然后会简要分析包加载的原理,使读者能知其然知其所以然。本文所属的解决步骤依赖于idea开发工具,eclipse使用者也可按此思路去解决问题。

一、手动排包

第一步:明确冲突的jar包以及所在的module
第二步:找到对应module,打开pom文件
第三步:右键maven-show denpency,打开依赖视图
第四步:command+f搜索对应的jar包,右键排除不需要的版本
第五步:reimpot,重复以上流程

二、maven helper插件排包

2.1 maven helper插件安装教程

安装说明:intellij IDEA->Preferences->Plugins->marketplace搜索,然后点击按钮即可
alibaba maven helper使用会出现idea卡死情况,不推荐使用。
在这里插入图片描述使用说明:
打开pom.xml文件在下方选择Dependency Analyzer,可以检索冲突的jar,然后右键exclude。在这里插入图片描述

2.2 使用maven helper排包

1) 定位到冲突的类所在的包
冲突包的一般表现形式为:
java.lang.NoSuchMethodError:javax.el.ELUtil.getExpressionFactory()等
在idea中commond+o搜索ELUtil,找到对应的jar包,一般有多个,正确的和冲突的
本例中:1. org.mortbaby.jetty:jsp-api(错误加载的) 2. javax.el:javax.el-api(应加载的)
已定位到冲突包。
2)搜索冲突包引入来源
借用maven hepler插件来解决
在最顶层start module中,all Dependencies as Tree,搜索冲突包jap-api,定位到是rmc-client中错误引入的。
在这里插入图片描述

3) 排除冲突包
在父pom中排除
找到rmc-client excludes对应包

 <dependency>
   <groupId>com.tmall.rmc</groupId>
   <artifactId>rmc-client
;