Guava and Weblogic:ClassNotFoundException

2020-02-07 07:03发布

问题:

I'm trying to work on a web application that deploys to Weblogic 10.3.5. One of the maven dependencies is Guava.

Unfortunately, upon attempting to publish the project, weblogic throws this exception:

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)

The rest of my maven dependencies SEEM to be working, but I'm unsure what the problem is.

Can anyone assist in troubleshooting? Environment is Eclipse with M2E plugin, Weblogic Server is integrated into Eclipse.

Update: Guava entry in pom.xml:

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>11.0.2</version>
    </dependency>

I included another library (commons-lang) and it worked fine.

Update 2: This may be a classloader issue. I got a clue from this blog: http://blog.eisele.net/2011/12/running-richfaces-410final-on-weblogic.html. It seems WLS uses some google-commons library.

I'm trying to force it to use my version by making changes in the weblogic.xml file, but it doesn't seem to be working.

回答1:

  • Yes it's classloader issue (application vs. WebLogic classloading)
  • guava libraries and com.google.common contains same classes
  • WebLogic has com.google.common_1.0.0.0_0-6.jar or com.google.common_1.1.0.0_0-6.jar in it's classpath, in modules directory. (depending on WebLogic version, but the jar content is same, only META-INF\MANIFEST.MF is different)
  • You cannot find this library in WebLogic Classloader Analysis Tool (CAT). I'm not sure why is that....
  • Why not using WebLogic built in feature with help of FilteringClassLoaders - prefer-application-packages ?

you need to add something like this to your weblogic.xml or weblogic-application.xml if you are in EAR application

<wls:container-descriptor>
    <wls:prefer-application-packages>
            <wls:package-name>com.google.common.*</wls:package-name>
    </wls:prefer-application-packages>
</wls:container-descriptor>

Then redeploy the application.

It works for us.

  • pros: no need to replace & rename magic with com.google.common*.jar files... that's a way to suicide...

Hope it helps.

For more info, see the link:
http://www.lucubratory.eu/guava-and-weblogic12c/



回答2:

Go to your weblogic folder, weblogic-home >modules and if there is a com.google.common....jar file, just delete it and replace it with a guava.jar file, and you have to rename the guava file with the old com.google.common......jar name (cuz weblogic is looking for this name, but its conflicting with your guava file).

i had the same problem here