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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章