今天开发时,本地测试正常 ,本地用tomcat服务器,更新到生产上报如下错误,生产采用weblogic服务器。

java.lang.LinkageError:loader constraint violation: loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) previously initiated loading for a different type with name “javax/xml/transform/Source”

weblogic 工程java.lang.LinkageError 错误解决_jar

根据错误信息可以看到是由于weblogic下载项目的jar包于项目本身的jar冲突了。
javax/xml/transform/Source 就是 javax.xml.transform.Source 我们找到jar jaxrpc.jar 看到并没有Source。

weblogic 工程java.lang.LinkageError 错误解决_jar_02


看到项目的jar包中没有找到该jar包,那只有jdk中jar与weblogicjar冲突了。

我们找到jdk中rt.jar 找到了

javax.xml.transform.Source

weblogic 工程java.lang.LinkageError 错误解决_java_03


我们 再来看看weblogic 下载的jar包 路径 :

weblogic/Oracle/Middleware/wlserver_10.3/server/lib

weblogic 工程java.lang.LinkageError 错误解决_jar_04


但是 实在没有找到webloic中的jar。

所以实在无法找到冲突的jar,就找到了一个简单粗暴的 方法,由于本项目jar不需要weblogic的依赖jar,所以找到weblogic.xml。

prefer-web-inf-classes 中true 改为false。

修改前

weblogic 工程java.lang.LinkageError 错误解决_jar_05


修改后

weblogic 工程java.lang.LinkageError 错误解决_xml_06


即将weblogic优先加载的项目jar的配置设置改为false,不在优先从weblogic加载jar包。

重启后成功解决,但是最好还是找到真正的冲突jar所在。