首页 > 解决方案 > 读取对象时出现 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 。如果您有任何问题/澄清,请告诉我。对此的任何帮助将不胜感激。为此苦苦挣扎了两天!

标签: javamaventomcatservletsclasspath

解决方案


推荐阅读