我正在尝试开发部署到 Weblogic 10.3.5 的 Web 应用程序。 Maven 依赖项之一是 Guava。
不幸的是,在尝试发布项目时,weblogic 抛出此异常:
java.lang.ClassNotFoundException: com.google.common.eventbus.EventBus
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
我的 Maven 依赖项的其余部分似乎可以正常工作,但我不确定问题出在哪里。
任何人都可以协助解决问题吗?环境是带有M2E插件的Eclipse,Weblogic Server集成到Eclipse中。
更新:pom.xml 中的 Guava 条目:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>11.0.2</version>
</dependency>
我包含了另一个库 (commons-lang),它运行良好。
更新 2:这可能是类加载器问题。我从这个博客得到了线索:http://blog.eisele.net/2011/12/running-richfaces-410final-on-weblogic.html . WLS 似乎使用了一些 google-commons 库。
我试图通过更改 weblogic.xml 文件强制它使用我的版本,但它似乎不起作用。
最佳答案
- 是的,这是类加载器问题(应用程序与 WebLogic 类加载)
guava
库和com.google.common
包含相同的类- WebLogic 的类路径中有
com.google.common_1.0.0.0_0-6.jar
或com.google.common_1.1.0.0_0-6.jar
,在模块目录中。 (根据WebLogic版本,jar内容是一样的,只是META-INF\MANIFEST.MF不同) - 您在 WebLogic 中找不到此库 Classloader Analysis Tool (猫)。我不确定为什么会这样......
- 为什么不在 FilteringClassLoaders 的帮助下使用 WebLogic 内置功能 - prefer-application-packages ?
如果您在 EAR 应用程序中,您需要将类似这样的内容添加到您的 weblogic.xml
或 weblogic-application.xml
中
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>com.google.common.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
然后重新部署应用程序。
它对我们有用。
- 优点:无需用 com.google.common*.jar 文件替换和重命名 magic...那是一种自杀方式...
希望对您有所帮助。
有关详细信息,请参阅链接:
https://www.rational-pi.be/2013/03/guava-and-weblogic12c/
关于java - Guava 和 Weblogic :ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688207/