java.lang.NoClassDefFoundError: Lorg/slf4j/Logger

我正在使用带有 maven 支持的 Intellij 启动 tomcat。一旦我添加了以下 tomcat maven 依赖项:


        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->

    <dependency>

        <groupId>org.apache.tomcat</groupId>

        <artifactId>tomcat-catalina</artifactId>

        <version>8.5.38</version>

    </dependency>

启动时,它将抛出此异常:


Caused by: java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;

at java.lang.Class.getDeclaredFields0(Native Method)

at java.lang.Class.privateGetDeclaredFields(Class.java:2583)

at java.lang.Class.getDeclaredFields(Class.java:1916)

at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:110)

at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:89)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)

at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:328)

at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:772)

at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)

at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

... 44 more

Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1185)

... 57 more

它表明它具有类org.slf4j.Logger:


如果我删除了 tomcat 依赖项,一切都会再次正常运行。

http://img1.mukewang.com/62c568a20001fd5610360618.jpg

心有法竹
浏览 365回答 3
3回答

白衣染霜花

您需要将 .jar 文件添加到 lib 文件夹$TOMCAT/webapps/$YOUR_WEB_APP/WEB-INF/lib/

胡子哥哥

在这里添加答案只是因为当我试图调查一个稍微不同的问题时,这个问题是第一个相关的搜索结果:使用 Eclipse 和 Tomcat 运行应用程序 - 会出现相同的错误。我从来没有意识到 Eclipse(有时?它是我的口味吗?)不会从 Maven 生成的 WAR 文件中复制 lib 目录 - 所以即使必要的 jar 文件在 WAR 中,Eclipse 也没有使用它们 -在 Tomcat 服务器的 wtpwebapps 目录中的服务器(尤其是 Tomcat)上运行/调试时,它使用某种分解结构。因此,正如其他人在其他需要挖掘的问题中指出的那样,PS,是的,正如其他人指出的那样,在 Eclipse 中执行 Maven -> Update Project 经常会弄乱上述配置PPS 我很抱歉,Eclipse - 以上是因为我的 pom.xml 配置破旧 - Eclipse 在每个 Maven 期间所做的 -> 更新项目是将 pom.xml 中的任何配置复制到它自己的项目配置中 - 所以当依赖项是没有明确说要在 pom.xml 中复制,它们没有被复制(项目属性已重置)-我已按照此处的答案修复了此问题

慕莱坞森

如果您使用的是 Eclipse,文件.classpath需要指出 lib 路径。因此,请检查此行是否包含在我们的设置中。 <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>'<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">&nbsp; &nbsp; <attributes>&nbsp; &nbsp; &nbsp; &nbsp; <attribute name="maven.pomderived" value="true"/>&nbsp; &nbsp; &nbsp; &nbsp; <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>&nbsp; &nbsp; </attributes></classpathentry>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java