项目用到了一个第三方打包的jar包,里面的结构如下:
1.png

可以看到用到了一些apache的东西。我在开发环境tomcat下能正常运行,部署到正式环境weblogic 10.3.0下就报异常了,找不到方法或者找不到类。那么极有可能是jar包冲突了,于是我到weblogic下的domain/lib/ 中,果然发现有重复的axis2axiom
2.png

并且版本较旧,所以找不到方法。
一通百度后,试验了以下几个方法:

  • 将第三方包放到domain/lib下 结果:错误,无法引用到正确的类
  • 在web-inf下加weblogic.xml,然后添加以下配置

    <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>

    结果:错误,因为优先加载web-inf下的包,导致weblogic所要调用的包都从web-inf下加载,应用无法启动。

  • weblogic.xml下加以下

    <container-descriptor>
    <prefer-application-packages>
    <package-name>org.apache.axis2.*</package-name> 
    <package-name>org.apache.axiom.*</package-name>
    </prefer-application-packages>
    </container-descriptor>

    结果:错误,无法解析prefer-application-packages这个tag,报xmln错误。

  • 删掉weblogic中所有冲突的包,就只使用web-inf/lib下的第三方包 结果:错误,类的引用还是有问题,而且weblogic中其他项目会受影响

最后,再经过一番谷歌,终于在oracle的社区中找到了解决方法……
项目.ear/META-INF 中创建一个weblogic-application.xml ,写下如下配置:

<?xml version="1.0"?> 
<weblogic-application> 
    <prefer-application-packages> 
        <package-name>org.apache.axis2.*</package-name> 
        <package-name>org.apache.axiom.*</package-name>
    </prefer-application-packages> 
</weblogic-application>

最主要的原因是,weblogic 10.3.3 以下的版本,只能在domain/applications/META-INF/weblogic-application.xml配置类的加载路径是以web-inf/lib下的包为优先的,在weblogic 10.3.3 以上的版本,则可以在domain/applications/APP.ear/APP.war/web-inf/weblogic.xml中进行配置,也就是我上面尝试的第三个方法。

参考链接:Oracle社区

Last modification:December 7, 2018
If you think my article is useful to you, please feel free to appreciate