Гуава и Weblogic:ClassNotFoundException
Я пытаюсь работать над веб-приложением, которое развертывается в Weblogic 10.3.5. Одной из мавенских зависимостей является гуава.
К сожалению, после попытки опубликовать проект, 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 зависимости кажутся работающими, но я не уверен, в чем проблема.
Кто-нибудь может помочь в устранении неполадок? Среда Eclipse с плагином M2E, Weblogic Server интегрирован в Eclipse.
Обновление: запись Гуавы в pom.xml:
<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, но, похоже, он не работает.
2 ответа
- Да, это проблема загрузчика классов (приложение против загрузки классов 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
в его classpath, в каталоге модулей. (в зависимости от версии WebLogic, но содержимое jar-файла одинаково, отличается только META-INF\MANIFEST.MF) - Вы не можете найти эту библиотеку в Инструменте анализа WebLogic Classloader(CAT). Я не уверен, почему это....
- Почему бы не использовать встроенную функцию WebLogic с помощью FilteringClassLoaders - предпочитать-приложения-пакеты?
вам нужно добавить что-то подобное в вашweblogic.xml
или же weblogic-application.xml
если вы находитесь в приложении EAR
<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... это способ самоубийства...
Надеюсь, поможет.
Для получения дополнительной информации, смотрите ссылку:
http://www.lucubratory.eu/guava-and-weblogic12c/
Перейдите в папку weblogic, модули weblogic-home > и, если есть файл jar com.google.common...., просто удалите его и замените его на файл guava.jar, и вам придется переименовать файл guava с помощью старый com.google.common...... имя фляги (cuz weblogic ищет это имя, но оно конфликтует с вашим файлом guava).
у меня была такая же проблема здесь