java - 无法启动tomcat 7 : Caused by: java. lang.NoClassDefFoundError

标签 java tomcat tomcat7

我的 web 项目直到昨天都运行良好,但是今天当我启动我的 tomcat 服务器 7 时,它无法启动,并在 eclipse 中出现以下错误:

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CiscoQA_Automation_Framework]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 7 more
Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:192)
at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:157)
at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1577)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5419)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1722)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1573)
... 19 more

引用后here和其他几个链接我已经清理了 WEB-INF/lib 和类路径,然后在 WEB-INF/lib 和类路径中添加了“log4j-web-2.3.jar”和“log4j-1.2.17.jar”。我已经尝试清理项目和 tomcat 工作目录,但没有任何效果。

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener SSLEngine="on"          className="org.apache.catalina.core.AprLifecycleListener"/>
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener"/>
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

最佳答案

您有一个自定义 <Listener>在你的server.xml它引用了一个对 Log4j 具有静态依赖性的类,并且您没有将 Log4j jar 文件添加到 Tomcats 类路径,即添加到 $TOMCAT_HOME/lib (或 $TOMCAT_BASE/lib )文件夹。

要么删除监听器,要么添加缺少的 jar 文件。


更新

你说你添加了log4j-web-2.3.jarlog4j-1.2.17.jar ,但错误消息显示 org.apache.logging.log4j.Logger丢失了。

log4j-1.2.17.jar有一个 org.apache.log4j.Logger ,所以这是错误的 Log4j 版本。

log4j-web-2.3.jar包含 Log4jServletContainerInitializer在包装内 org.apache.logging.log4j.web . Tomcat 只需在那里就可以自动加载它。这是需要 org.apache.logging.log4j.Logger 的类(class).

org.apache.logging.log4j.Logger可以在 log4j-api-2.3.jar 中找到,所以你需要这个文件,但它只是 API。您还需要 log4j-core-2.3.jar ,这是实际的 Log4J 2 实现。

如果您没有使用 Log4j 1 API 的代码,请删除 log4j-1.2.17.jar .如果您确实有使用旧 API 的代码,请将该文件替换为 log4j-1.2-api-2.3.jar ,它将旧的 API 调用重定向到新的 API。这消除了配置两者的需要,并且无论使用的 API 版本如何,都允许一个日志文件。

总结:您需要以下文件:

  • log4j-api-2.3.jar
  • log4j-core-2.3.jar
  • log4j-web-2.3.jar
  • log4j-1.2-api-2.3.jar (替换 log4j-1.2.17.jar ,仅在旧代码需要时添加)

升级到最新版本 (2.5)。

关于java - 无法启动tomcat 7 : Caused by: java. lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37444073/

相关文章:

java - 使用不带 web.xml 的 ResourceConfig 的 Jersey 应用程序的 URL

java - 所有接收消息的消息时间显示相似

java - 当出现内存不足错误时自动重启tomcat

java - 比较两个字符串并根据结果显示图像

tomcat - 同一台服务器中的两个 tomcat - Upstart Script Ubuntu Server

java - 为 @Timed metrics-spring 获取 2 个相同的 interceptorsAndDynamicMethodMatchers

java - 在您的类路径中找不到编译器! Axis 1.4 Tomcat 7 Java 8

tomcat - 禁用 Tomcat7 管理器

java - 使用什么算法或模式来检查哪些表中的哪些行将在 mysql/pgsql 中级联删除?

java - 为每个项目列出多个 TextView