【问题标题】:Log4jConfigListener cannot be found -- context fails to start找不到 Log4jConfigListener -- 上下文无法启动
【发布时间】:2011-06-14 09:21:05
【问题描述】:

我正在尝试在 Eclipse 上设置 Web 应用程序。我正在使用 Tomcat 6.0 和 jdk 1.6.0_23。 出于某种原因,我收到此错误:

严重:配置类 org.springframework.web.util.Log4jConfigListener 的应用程序侦听器时出错 java.lang.ClassNotFoundException:org.springframework.web.util.Log4jConfigListener 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在 org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在 org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 在 org.apache.catalina.core.StandardService.start(StandardService.java:519) 在 org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:581) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2011 年 1 月 24 日上午 11:44:08 org.apache.catalina.core.StandardContext listenerStart 严重:配置类 org.springframework.web.context.ContextLoaderListener 的应用程序侦听器时出错 java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在 org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在 org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 在 org.apache.catalina.core.StandardService.start(StandardService.java:519) 在 org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:581) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

我检查了是否所有库都已添加到构建路径中,并且一切似乎都正确。包括 log4j-1.2.15.jar 和所有必要的 spring 库。

我很困惑是什么问题,特别是因为该项目在另一台计算机上运行良好。对此问题的任何帮助将不胜感激。

纳塔尔

【问题讨论】:

  • 你能列出你已经包含的库吗
  • 我正在使用 Hibernate,所以我有 hibernate-annotations.jar、hibernate3.jar 等休眠库。但是根据堆栈跟踪,我似乎缺少一个 springframework 库。我有这些弹簧库:- spring.jar、spring-aop.jar、spring-aspects.jar、spring-beans.jar、spring-context.jar、spring-context-support.jar、spring-core.jar、spring -jdbc.jar、spring-test.jar、spring-web.jar、spring-webmvc.jar
  • 好的,那么没有弹簧罐,是吗?

标签: java spring jsp web-applications tomcat6


【解决方案1】:

迁移到 log4j2?

不要忘记检查您的 webapp/WEB-INF/web.xml(Web 应用程序部署描述符)以获取无关的事件侦听器定义。

【讨论】:

    【解决方案2】:

    如果你使用,log4j2,你可以在

    中找到这些类
    org.apache.logging.log4j.web.*
    

    包。

    【讨论】:

      【解决方案3】:

      一个简单的解决方案是在 Eclipse 中清理 Tomcat 目录。它对我有用。

      【讨论】:

      • 你会怎么做?
      • 在 Eclipse Mars 的服务器视图窗格中,右键单击服务器实例,然后选择“Clean...”或“Clean Tomcat Work Directory...”
      【解决方案4】:

      Reticulogic 的第二个建议是正确的。但是,在 Eclipse Helios 中,“Java EE Module Dependencies”选项已被删除。 Helios 的修复方法如下:

      1. 在 Eclipse 中右键单击您的项目并转到 Properties-->Deployment Assembly
      2. 点击“添加...”
      3. 选择“Java Build Path Entries”并点击“下一步”
      4. 选择“Maven 依赖项”并单击“完成”

      【讨论】:

      • 非常感谢!多年来一直坚持这一点 - 赏金即将到来。
      • 还要检查 Properties --> Maven 下的“Enable dependency management”是否被选中..
      【解决方案5】:

      如果你使用的是 maven 和 eclipse

      1) 查看您的 Web 项目的 .classpath 文件。如果您有一个类路径条目“org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER”,请确保该属性也存在。

      <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
          <attributes>
              <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
          </attributes>
      </classpathentry>
      

      2) 如果这不起作用,则在 Eclipse 中右键单击您的 Web 项目并转到 Properties-->JavaEE Module dependencies。确保选中 Maven 依赖项框。

      然后保存,build deploy yada yada

      【讨论】:

        【解决方案6】:

        org.springframework.web.util.Log4jConfigListener 类绝对不在你的类路径中。

        我建议的第一件事是您将 Tomcat 中的日志记录级别(在 conf 文件夹中)设置为“ALL”或“DEBUG”,这样您就可以准确地看到容器中正在发生的事情防止此类被发现。

        其次,如果在 linux/mac 上,我建议您通过运行 grep 检查您的 JAR 文件中是否存在丢失的类文件:

          # run at the root of your lib folders:
          grep -ri "org.springframework.web.util.Log4jConfigListener" *
        

        上述命令将返回包含该包的所有 JAR 文件。隔离 JAR 文件后,您可以进一步排除故障。

        第三,确保没有任何冲突。类路径中存在多个版本的 Log4j 将造成严重破坏。如果有 2 个 org.springframework.web.util.Log4jConfigListener 包,系统应该如何知道要加载的 哪个? Tomcat 有 3 个不同的类路径文件夹:

         shared/lib
         lib
         webapps/yourapp/WEB-INF/lib
        

        确保这些文件夹中只有一个 log4j JAR 文件。

        【讨论】:

        • 我将删除所有库并从头开始。谢谢大家的帮助。
        猜你喜欢
        • 2012-08-15
        • 2016-07-26
        • 1970-01-01
        • 2013-12-27
        • 2022-08-23
        • 2015-08-07
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多