java - 读取对象时出现 ClassNotFound 错误 (Tomcat)
问题描述
我将尽我所能解释这一点!我有一个使用 maven 创建的战争和罐子。JAR 包包含一些公共类,其他战争文件也将使用这些类。所以我试图初始化 log4j 2 对象并从 log4j 配置 XML 中获取一些值。我已经添加了:
<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>
在 WAR 和 JAR 的 pom 文件中。所以我在 war 文件的一个类中创建了一个 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 文件放在 Tomcat 的 lib 文件夹中,将 WAR 文件放在 webapps 文件夹中。首先,我认为我需要在 lib 文件夹中单独添加 log4j jar。所以我也试过了。但是当我尝试运行它时会引发 LinkageError 。如果您有任何问题/澄清,请告诉我。对此的任何帮助将不胜感激。为此苦苦挣扎了两天!
解决方案
推荐阅读
- bash - 脚本 - 函数脚本可见性中的分叉(背景)变量
- c++ - 读取文本文件并存储到数组中
- python - ValueError 的 Python 断言
- arrays - Bash - 如何将数组元素拆分为列表
- java - 使用 TagExtraInfo 类 org.apache.taglibs.standard.tei.ForEachTEI for 'c:forEach; 遇到 A 类问题
- reactjs - 在组件渲染之前获取数据,Reactjs
- recaptcha - 如何在 JAVA 中实现 google recaptcha 检测密码泄漏和违反凭据?
- python - Python Boto3 显示最后一条记录的信息不完整
- php - 为什么在 HTML FORM 的可空字段中插入一个值会给我一个 NULL,即使它不是?
- ios - 如何在 SwiftUI 中缩小导航标题?