java.lang.LinkageError异常,jar包冲突

问题点描述:

之前使用eclipse开发的web项目,现在使用IntelliJ IDEA。于是就将eclipse里的一个web项目导入到了Idea中变成了一个maven项目。等一切都配置好之后启动Tomcat,然后开始运行程序,爆出以下Error

java.lang.LinkageError: loader constraint violation: 
when resolving method "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager
(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" 
the class loader (instance of org/apache/jasper/servlet/JasperLoader) 
of the current class, org/apache/jsp/WEB_002dINF/jsp/login_jsp, 
and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) 
for the method's defining class, org/apache/jasper/runtime/InstanceManagerFactory, 
have different Class objects for the type org/apache/tomcat/InstanceManager 
used in the signature

 整的一头懵逼,无奈去找了度娘,说是jar包冲突问题。找到两种解决方式,亲测可用


方式一:

我之前的web项目的lib包下有

jsp-api-2.2.jar
jstl-1.2.jar
tomcat-api-7.0.52.jar
tomcat-el-api-7.0.52.jar
tomcat-jsp-api-7.0.52.jar
tomcat-servlet-api-7.0.52.jar这些文件与to

tomcat服务下lib包中的jar包冲突,删除WEB-INF-->lib下的jar包即可

 

方式二:在tomcat的配置文件context.xml中配置一个参数 <Loader delegate="true" />, 就可以解决

True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

讲真的方式二我不明白,<Loader delegate="true" />引用连接https://segmentfault.com/q/1010000000155690

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值