SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder” IntelliJ问题

6
我在IntelliJ程序中遇到了以下错误信息: SLF4J: 未能加载类 "org.slf4j.impl.StaticLoggerBinder"。 SLF4J: 默认将使用无操作(NOP)记录器实现 SLF4J: 有关详细信息,请参见http://www.slf4j.org/codes.html#StaticLoggerBinder。 功能:Shout
经过研究,看起来我缺少JAR文件,需要更新类路径等。 一些答案说要在Maven POM中添加依赖项,所以我已经这样做了,点击“构建”并重新运行带有相同结果的功能文件。 一些答案还说要添加jar文件,但我对Java IDE非常不熟悉,也不是开发人员。我搜索了如何添加jar文件,大多数答案告诉我去IntelliJ的项目结构。在项目结构的工件部分,我点击“+”,然后看到一个选项“从模块创建jar”,但这个弹出框非常令人困惑。我不知道该怎么做。我也下载了SLF4J jar文件,但我不知道如何将它们导入到IntellJ中。从模块创建JAR似乎没有与桌面的链接来导入任何东西。从空白创建jar会产生另一个屏幕,似乎没有任何与桌面的链接。其他结果说要从模块下的“+”符号添加jar文件,这也似乎没有任何选项。我也不确定这是多大的问题,因为运行我的功能文件会导致错误的输出,并且可能无论如何都存在此问题。
以下是我的POM:

     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>



<groupId>cucumber-school</groupId>

<artifactId>shouty</artifactId>

<version>0.0.1</version>

<packaging>jar</packaging>

<name>Shouty</name>



<properties>
    <java.version>1.8</java.version>
    <junit.version>4.12</junit.version>

    <cucumber.version>2.3.1</cucumber.version>

    <cucumber.pro.version>2.0.4</cucumber.pro.version>

    <maven.compiler.version>3.3</maven.compiler.version>

</properties>



<dependencies>

    <dependency>

        <groupId>io.cucumber</groupId>

        <artifactId>cucumber-java</artifactId>

        <version>${cucumber.version}</version>

        <scope>test</scope>

    </dependency>



    <dependency>

        <groupId>io.cucumber</groupId>

        <artifactId>cucumber-junit</artifactId>

        <version>${cucumber.version}</version>

        <scope>test</scope>

    </dependency>



    <dependency>

        <groupId>io.cucumber</groupId>

        <artifactId>pro-plugin</artifactId>

        <version>${cucumber.pro.version}</version>

        <scope>test</scope>

    </dependency>



    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>${junit.version}</version>

        <scope>test</scope>

    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

</dependencies>


1
既然您已经意识到缺少一个jar文件,并且pom文件中的依赖项应该解决了这个问题,但实际上没有解决,那么很可能是您在pom文件中做错了什么。您不觉得向我们展示pom文件以便我们帮助您找出错误是一件有用的事情吗?请展示您的POM文件! - Andreas
我会说你很可能在类路径上有一些冲突。你有所需的jar包,但是类加载器中的另一个类被先找到了。我以前也遇到过这个问题。进入你的依赖层次结构并找出哪个类被另一个log4找到,然后在你的pom文件中添加一个排除。 - GSUgambit
你理解 https://www.slf4j.org/codes.html#StaticLoggerBinder 上的解释吗? - Thorbjørn Ravn Andersen
我已经阅读了它,并且它说要将slfj4添加到类路径中,但我不知道如何在IntelliJ中实现这一点。我知道如何在eclipse中添加Jars。而且我已经按上面所述调整了pom文件。 - Julie Pixie
我对classpath问题非常困惑。我一直去项目结构>工件> +号> Jars,但我不明白此时我应该做什么。其他答案说只需添加jar文件,但我看到的唯一选项是创建一个未命名的(某物)?我甚至无法确定它正在创建什么。我认为它试图从头开始创建一个jar文件。但我要求它导入。还有一个“创建清单”和“使用现有清单”的按钮,这也不清楚。我已经谷歌了三天,但我仍然非常困惑。 - Julie Pixie
4个回答

21

我将这个放在这里,希望它能帮助其他人。我在Mac上使用IntelliJ。最初,我遇到了“无法加载类org.slf4j.impl.StaticLoggerBinder”的错误信息,所以我添加了以下依赖项:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.8.0-beta2</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.8.0-beta2</version>
        <scope>test</scope>
    </dependency>

请注意,每个版本都应更改为所需版本。之后,我开始收到“找不到SLF4J提供程序”的错误消息。我必须转到文件->项目结构->模块->依赖项选项卡->选择两个依赖项->确保它们的范围是“编译”,而不是“测试”->单击“应用”->单击“确定”。enter image description here


非常感谢,我的问题是因为作用域是“测试”而不是“编译”。 - invzbl3
是的,谢谢。我也在依赖项中正确地放置了它:<scope>test</scope>。 - White_King
在Gradle中,如果有人试图在主程序中使用记录器,请确保它是“compile”而不是“testCompile”。 - ashish malgawa

1

由于在设置其他jar时下载的slf4j库版本不兼容所致。在pom.xml中加入以下内容,它将禁用所有来自slf4j的警告/错误。我试过这个方法,它有效。

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>2.0.0-alpha6</version>
    <scope>test</scope>
</dependency>

1
当我尝试使用maven构建一个scala 2.11项目时,遇到了同样的问题,但添加依赖项的解决方案并没有起作用。 从Project Structure -> Modules -> Dependencies中删除scala.sdk.2.11.12可以解决我的问题。

-1

如果你发现查找POM.xml很困惑,请尝试检查你的IntelliJ IDE的可用更新,然后尝试更新它。在更新过程中,新版本的IntelliJ将显示需要修复的问题(包括缺少的jar文件或类路径冲突)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接