Я постараюсь объяснить это в меру своих способностей! У меня есть война и банка, созданные с использованием 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, когда я пытаюсь запустить его. Если у вас есть вопросы / разъяснения, пожалуйста, дайте мне знать. Любая помощь в этом будет оценена. Бороться два дня с этим!