Ошибка ClassNotFound при чтении объекта (Tomcat) - PullRequest
0 голосов
/ 04 ноября 2019

Я постараюсь объяснить это в меру своих способностей! У меня есть война и банка, созданные с использованием Maven. Пакет JAR содержит некоторые общие классы, которые также должны использоваться другими файлами war. Поэтому я пытаюсь инициализировать объекты log4j 2 и извлечь некоторые значения из XML-файла конфигурации log4j. Я добавил:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.1</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.12.1</version>
</dependency>

В pom-файлах WAR и JAR. Поэтому я создаю объект LoggerContext в одном из классов файла войны. Затем объекты передаются одному из классов в файле JAR.

LoggerContext loggerContext  = (LoggerContext) LogManager.getContext(false);
        String configFilePath = servletContext.getRealPath(WebInit.getProperty("log4jPropertiesFileName"));
        File loggingConfigFile = new File(configFilePath);

        loggerContext.setConfigLocation(loggingConfigFile.toURI()); 

        log = new RunningLog(loggerContext, logHostName,  "MyAPP", "ALL", "MyAPP", "MyAPP");

Класс RunningLog находится в файле JAR. Поэтому, когда я пытаюсь что-то сделать с объектом loggerContext, я получаю сообщение об ошибке:

04-Nov-2019 13:45:07.852 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [InitialiseMyAPP] in web application [/MyAPP] threw load() exception
java.lang.ClassNotFoundException: org.apache.logging.log4j.core.LoggerContext
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Строка, выдающая исключение:

setOracleSchema(loggerContext.getConfiguration().getStrSubstitutor().getVariableResolver().lookup("Schema"));

Я поместил файл JAR вПапка lib Tomcat и файл WAR в папке webapps. Сначала я подумал, что мне нужно добавить jar log4j отдельно в папку lib. Я тоже это попробовал. Но это бросает LinkageError, когда я пытаюсь запустить его. Если у вас есть вопросы / разъяснения, пожалуйста, дайте мне знать. Любая помощь в этом будет оценена. Бороться два дня с этим!

...