运行 Jar 时的 Intellij 错误 -> SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”

问题描述

我在 Windows 上使用 Intellij 2021.1.2 Community Edition 和 Java 16 和 Maven 3.6.3(与 Intellj 捆绑)。

当我尝试运行我的 jar 时,这里是完整的错误

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (nop) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我发现了很多关于此错误的问题,但没有一个与我的具体情况相符,所以如果这是重复的,请指出正确的解决方案。

我的项目昨天运行良好,自昨天以来我没有对任何依赖项进行任何更改,所以我对可能是什么问题感到有些困惑。也就是说,我正在尝试运行一个使用依赖 Jedis 的 jar。我在我的 pom 中将它列为:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.1</version>
</dependency>

而且似乎 slf4j 是 Jedis一个依赖项,正如我在 Maven 窗口中看到的:

enter image description here

在 Intellij 中,如果我转到 Project Structure -> Modules,slf4j 将设置为编译。如果我通过库文件路径 (C:\Users\MyUsername.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30-sources.jar) 转到 slf4j 源 jar Project Structure -> Libraries 打开jar,可以看到类文件“org.slf4j.impl.StaticLoggerBinder”确实存在。依赖也只用于 Jedis,所以似乎没有依赖冲突或任何东西。

在 maven 中,我使用“构建工件”功能构建了 jar,将库编译成单个 jar。将它们编译为单独的 jar 会产生相同的错误

什么给?如果您对此问题有任何见解,我们将不胜感激。

解决方法

我遇到了这个问题。为了解决这个问题,我将 slf4j 依赖的范围从 Compile 更改为“Test”,然后转到 IntelliJ 中的 File -> Project Structure -> Modules -> Dependencies 选项卡。它解决了问题