我仅仅是在Junit代码中执行了如下一行代码,竟然抛出了异常,我震惊了,  我只是构造了一个对象啊

DefaultHttpClient client = new DefaultHttpClient();

于是我跟踪该构造函数,最后发现是在如下代码处抛出的异常:

private final Log log = LogFactory.getLog(getClass());

异常信息如下:

在targetd exception的发现如下信息:

java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.

分析原因:

原因已经很明显,是jar包冲突引起的,应该是jvm在加载的过程中加载了错误的log4j,而恰好不是我上面用到的,从而导致代码执行到上述位置时发现LogFactory还并没有加载初始化,导致异常。

解决办法:

解决方案也很显然了,去掉其中一个jar包,问题马上就可以得到解决。

此外我也查了很多资料,jar包冲突会出现很多莫名其妙的问题:下面的介绍也许对大家有用。

JAR包冲突解决方法问题表现系统原来可以运行, 但是引入某个jar包(为了调用某个服务)后, 所有配置/参数都正确, 但是却运行不起来, 或者报找不到类, 找不到方法等异常!
java类找不到 java.lang.ClassNotFoundException
方法不存在 java.lang.NoSuchMethodError
字段不存在 java.lang.NoSuchFieldError
类错误 java.lang.LinkageError
表面原因war包中jar包和服务器上jar包冲突, 由于现在服务器功能越来越强大, 而引入的jar也在不断增加, 出现的冲突的可能性也越来越大, 而且正式环境复杂, 而且不能轻易修改服务器相关配置
根本原因同一个java类存在多个jar包或类路径中, 而这大多由于使用了不同jar包版本造成.
maven管理jar包, 如果同一个Jar有多个版本是根据最短路径拉取jar包的
同一个package出现在多个jar包里面, 怎么处理?
简单的处理方法根据报错的class名或方法名定位到可能导致冲突的jar包,jar包冲突引入有几种情况:
引入了这个jar包的多个版本,而mvn仲裁的时候取了错误的版本,这个版本本身就缺少正确的class或方法。
引入了不同坐标但是具有同名class的多个jar,mvn加载class的顺序差异会导致加载到错误的class。
通过mvn dependency:tree > tree.txt 导出全部的依赖。 可以使用 -Dverbose 、-Dincludes或者-Dexcludes参数来精确定位导致冲突的jar包。
找到需要排除的依赖jar包,通过mvn仲裁优先的方法定义正确的jar包,或者通过exclusion的方式排除错误的jar包。
温馨提示:另外在项目开发中jar尽量按需引入,系统管理起来,别什么都不管直接加包进来,这样也可以在一定程度上减少jar包冲突的风险。
避免技巧为了减少jar包冲突, 特别是一些底层jar包, 根据最短路径方法: 最好人工指定版本, 并使用dependencyManage

java.lang.ExceptionInInitializerError解决办法相关推荐

  1. 异常错误cannot be cast to java.lang.Comparable解决办法

    这两天笔者几篇文章介绍了改异常错误的文章. 关联文章的地址 对于TreeMap,他是一个有序的map,当你将key put到treeMap中,它会根据你所供给的排序规矩进行排序插入,如果没有供给,则使 ...

  2. 运行java项目时Exception in thread “main“ java.lang.UnsupportedClassVersionError解决办法

    java -jar test.jar 执行jar时遇到的问题如下: Error: A JNI error has occurred, please check your installation an ...

  3. java.lang.Long cannot be cast to java.lang.Integer解决办法

    情景: mybatis连接oracle 报错: 测试增的时候,报错 Java.lang.Long cannot be cast to  java.lang.Integer:删改没有报错. 排查过程: ...

  4. java string转long报错_java.lang.Integer cannot be cast to java.lang.Long解决办法

    你好我是辰兮,本次是项目遇到的java.lang.Integer cannot be cast to java.lang.Long异常以及相对应的解决方案. 文章目录 一.实战问题 用postman测 ...

  5. linux 下运行 jar包 java.lang.ClassNotFoundException: 解决办法

    1    发现了这个常见的异常  E:\test>java -cp . -jar x.jar  Exception in thread "main" java.lang.No ...

  6. 报 java.lang.ExceptionInInitializerError 的常见解决方法

    0. 如果你是遇到这个问题? java.lang.ExceptionInInitializerError Caused by: org.apache.ibatis.exceptions.Persist ...

  7. java null转换jason_常见java问题及解决办法汇总(干货可收藏)

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  8. 狂神说,mybatis-01 java.lang.ExceptionInInitializerError at com.kuang.dao.UserDaoTest.selectUser(UserD

    狂神说 MyBatis练习 mybatis-01程序练习报错: java.lang.ExceptionInInitializerError at com.kuang.dao.UserDaoTest.s ...

  9. java错误代码1638_Android studio报: java.lang.ExceptionInInitializerError 错误

    一.问题描述 Android studio导入一个项目报一堆错误: Process: xhs.com.xhswelcomeanim, PID: 1416 Java.lang.ExceptionInIn ...

最新文章

  1. 【framework】spring3-mvc实例-信息转换
  2. 开发到底喜欢看怎样的需求文档?
  3. html中给%3cb%3e加上颜色,如何使用CSS(jQuery SVG图像替换)更改SVG图像的颜色?
  4. 线性表 c++语言代码,线性表C++的两种实现(顺序表示、单链表)
  5. Asp.net在线统计人数
  6. ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动
  7. 【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较
  8. ModelForm views.py
  9. 判断页面打开的浏览器信息
  10. 社会工程学之黑客七宗罪——贪婪(死亡之PING)
  11. PS修改证件照照背景颜色(带毛发)
  12. 计算机编程的英语单词大全,计算机编程常用英语单词
  13. bitcoin.conf详解
  14. Commvault备份服务器硬件配置设计最佳实践
  15. 决策树剪枝python实现_决策树剪枝问题python代码
  16. win7虚拟机不安装VMware Tools实现传输文件
  17. 网站架构设计实战项目一
  18. C语言中的 @ 符号
  19. pinyin4j使用说明
  20. 【生活】解决广州社保无法查询的问题,2020年3月起,广州社保/医保/养老无法在微信/支付宝查询到的解决办法

热门文章

  1. 使用NPO依赖的一些类库文件介绍
  2. bmp制作自定义字体(cocostudio使用)
  3. .NET中方法的注意事项 明细
  4. SQL存储过程与自定义函数实例
  5. 在一个工程(包)下面让activity和SensorEventListener监听分离,在不同类中完成
  6. javascript 将页面上的Table导出保存为Excel (无格式)
  7. 【Scala】Scala中特殊函数的使用(代码)
  8. SpringMVC的返回值和参数类型
  9. udt编写高性能服务器,基于UDT协议的Oracle数据库远程备份的设计和实现
  10. 软件安全测试的几个原则