Сервер приложений Oracle развернул приложение, выдавшее ошибку - NoClassDefFoundError
Мы развернули наше веб-приложение, развернутое на сервере приложений Oracle, и столкнулись с этой ошибкой при запуске приложения.
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category
Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@12badee for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category)
У нас есть log4j, встроенный в наше веб-приложение WEBINF/lib, и у нас есть общая библиотека для log4j в нашей библиотеке приложений. Поскольку эта общая библиотека используется многими приложениями, мы не можем ее удалить.
Я понимаю, что между этими двумя библиотеками log4j существует некоторый конфликт классов. Есть ли в любом случае, что мы можем исключить эту общую библиотеку и работать со встроенным log4j внутри веб-приложения? любая помощь в этом отношении высоко ценится.
2 ответа
Используйте элемент предпочитайте web-inf-classes в вашем weblogic.xml
дескриптор приложения.
Согласно документации,
Установка этого элемента в True подрывает модель делегирования загрузчика классов, так что определения классов из веб-приложения загружаются в предпочтение определениям классов в загрузчиках классов более высокого уровня. Это позволяет веб-приложению использовать собственную версию стороннего класса, который также может быть частью WebLogic Server.
Это связанный вопрос, который также может вам помочь.
@Viccari Я искал то же самое, но для старого сервера приложений с OC4J. Решением было бы добавить WEB-INF/orion-web.xml со следующим содержимым
<orion-web-app ...>
...
<web-app-class-loader search-local-classes-first="true"
include-war-manifest-class-path="true" />
...
</orion-web-app>
Поскольку я развертывал приложение через консоль Enterprise Manager, вышеуказанное решение не сработало. Вы должны настроить загрузку классов в настройках развертывания, отключив опцию "Унаследовать импорт общей библиотеки родительского приложения".
Другой вариант - создать EAR с файлом META-INF/orion-application.xml со следующим содержимым и развернуть его.
<?xml version="1.0" encoding="UTF-8"?>
<orion-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd"
deployment-version="10.1.3.4.0" default-data-source="jdbc/OracleDS"
component-classification="external" schema-major-version="10"
schema-minor-version="0">
<imported-shared-libraries>
<remove-inherited name="*"></remove-inherited>
</imported-shared-libraries>
</orion-application>