jar包冲突的处理套路
所属分类 java
浏览量 1388
jar包冲突 常见错误
ClassNotFoundException
NoSuchFieldException
NoSuchMethodException
java.lang.LinkageError
使用了错误版本的jar
多个jar包中包含了同名类, 依赖环境 ,加载顺序不确定
尽量避免出现同一组件多个版本
比较常见的jar包冲突有
guava 日志框架 jackson httpclient 等
使用 maven 命令查看依赖树
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId
可以只有一个,但是冒号不能少
或者在 eclipse 查看 pom 的依赖层次结构
确定冲突的类及jar
确定正确的版本
使用 exclude 排除错误的版本
使用 scope test 或 provided
可以在pom 的最开始 显式声明正确的依赖 (利用 声明 和 短路径优先原则)
使用 dependencyManagement 指定版本,一般在父项目里指定, 子项目不需要指定版本
声明优先原则
短路径优先原则
排除 maven exclusion
指定版本 dependencyManagement
获取指定资源的所有路径
public static Enumeration getResourceUrls(String name) throws Exception{
if (name == null) {
return null;
}
return CommUtil.class.getClassLoader().getResources(name);
}
public static Enumeration getResourceUrls(Class cls) throws Exception{
if (cls == null) {
return null;
}
String name = cls.getName().replaceAll("\\.", "/") + ".class";
//System.out.println("name=" + name);
return CommUtil.class.getClassLoader().getResources(name);
}
jvm 参数
-XX:+TraceClassLoading -verbose:class
上一篇
下一篇
spring资源加载机制
spring组件扫描
spring实战之javaconfig
spring注解之@Value
金融圈饭局老司机火眼金睛识人
云原生应用12要素