情景
項目在tomcat運行正常,但是部署到weblogic總會報出ClassCastException, NoSuchFieldError, NoSuchMethodError…等等異常。
分析:
此類異常,大多可以歸結爲類庫衝突導致。即weblogic類庫已經包含了項目依賴的類庫,程序運行時,同個模塊的一些類從項目類庫中加載,一些類從weblogic類庫中加載,兩者的類庫有差異,當涉及到類型轉換,或者方法調用等等邏輯就導致了異常。
解決辦法
爲了避免上述類衝突情況,weblogic提供了一個機制,允許優先加載項目的類庫。
在項目 WEB-INF目錄新建 weblogic.xml文件,填寫衝突的類包名:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<container-descriptor>
<!-- 優先加載 web-inf 中部分類 -->
<prefer-application-packages>
<package-name>javax.persistence</package-name>
<package-name>org.hibernate.jpa.internal</package-name>
<package-name>org.slf4j</package-name>
<package-name>javassist</package-name>
</prefer-application-packages>
</container-descriptor>
</weblogic-web-app>