首页   快速返回

jar包冲突的处理套路     所属分类 java
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要素