【问题标题】:Eclipse Maven: SLF4J: Class path contains multiple SLF4J bindingsEclipse Maven:SLF4J:类路径包含多个 SLF4J 绑定
【发布时间】:2020-08-21 07:27:24
【问题描述】:

我在尝试以 Maven Build 运行时遇到此错误。 有人可以帮我解决绑定冲突吗,谢谢。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Applications/Eclipse.app/Contents/Eclipse/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/Applications/Eclipse.app/Contents/Eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Applications/Eclipse.app/Contents/Eclipse/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/Applications/Eclipse.app/Contents/Eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    这不是 Eclipse 中的错误。我们只需要从“Maven integration for eclipse”中卸载 slf4j,这是 eclipse 上已经安装的附加软件。你可以在 eclipse 市场看到这个。

    执行以下步骤:

    1. 在 Eclipse 中,转到帮助 -> 单击市场 -> 单击已安装。在这里,您将看到已安装的 Eclipse 的 Maven 集成。
    2. 现在单击更改按钮。在那里你会看到 slf4j over logback 被选中。取消选中它并单击确认按钮。这将从“Maven integration for eclipse”软件中卸载 slf4j。

    现在您可以在进行 maven 构建时检查 slf4j 绑定错误是否消失。享受吧!

    【讨论】:

    • 完美。一个技巧是“市场-> 单击已安装”没有显示“Eclipse 的 Maven 集成”。所以我搜索了显示为“已安装”的“Eclipse 的 Maven 集成”。然后选择按照屏幕截图中的建议进行更改。供参考。我使用的是 Eclipse 版本 2020-12。
    • Eclipse SYMREL 2021-06:相同的想法,不同的方法:帮助 -> 关于 Eclipse IDE -> 安装详细信息 - 选择 slf4j 而不是 logback,然后卸载。仅仅使用外部 Maven 并没有帮助。
    • 我使用的是 Eclipse 2021-03,但我没有安装 Maven 集成,但仍然遇到同样的问题。
    • 如果 maven 集成在安装搜索中不可用,您将看到它显示已安装。单击已安装,它将显示在已安装的插件列表中。然后你可以按照上面的步骤。注意:Eclipse 2021-09
    【解决方案2】:

    这是 Eclipse 中的一个已知错误。一种解决方法是,您单独安装 Maven(不使用 Eclipse 嵌入的 Maven 二进制文件)。

    然后您可以在以下位置选择该外部 Maven 二进制文件: Window->Preferences->Maven->Installations

    它应该看起来像这样:

    我在这里使用的是 Windows,但在 Linux 中是相同的过程。从包管理器安装 maven(例如 sudo apt install maven),然后在 Eclipse 中激活它。

    P.S:在您的系统上安装 Maven 后,命令 mvn dependency:tree 也将起作用。

    【讨论】:

    • 我尝试使用外部 maven,但在上面的屏幕上请注意,嵌入式运行时用于依赖解析,这就是发生冲突的时候。我仍然得到错误。
    【解决方案3】:

    这似乎是 Eclipse 版本 2020-09 之前的错误。我也收到了。

    参照。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=506676.

    到目前为止,我所知道的没有解决方法。使用项目的 Maven 依赖项不会解决问题,因为它是由 m2e 插件和 eclipse 引起的,所以它超出了项目的范围,它在 IDE 中。 :-(

    【讨论】:

    • 谢谢,所以最好的选择是选择旧版本的 Eclipse?
    • 我不知道您的最佳选择是什么,因为这取决于您的要求。例如:我选择忽略警告,因为如果没有其他更糟糕的缺点,我无法回到旧版本的 Eclipse。
    【解决方案4】:

    我建议使用 Maven 依赖树插件。从项目的根级别运行以下命令,您的 pom.xml 文件所在的位置:

    mvn dependency:tree
    

    您可以对slf4j 的输出进行搜索/grep,以查看哪些库引入了slf4j 依赖项,以及引入了哪些版本。还可以进一步限制输出从命令行,使用 GAV 坐标。但是,我经常发现查看整个树很有用,如果没有其他原因,我可以确定我在项目中看到了 每个 依赖项。如果你能走到这一步,你就完成了一半。

    下一步是如何处理引入不想要的slf4j 传递依赖的依赖。您可以从这些依赖项中 follow this Stack Overflow question排除 slf4j,在您的 POM 文件中使用如下所示的内容:

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>foo-bar</artifactId>
        <version>1.2.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    您可能必须添加多个排除项才能删除除您真正想要包含的一个 slf4j 依赖项之外的所有依赖项。作为健全性检查,您可以再次运行依赖树,以验证您的构建中只有一个实现。

    【讨论】:

    • 感谢您的帮助,还有一个问题是如何使 mvn 依赖:树运行?
    • 我不明白你上面的评论。
    • mvn dependency:tree 不知道把这个命令放在哪里
    • 您需要从命令行运行它。一些 IDE,例如 IntelliJ,也有运行命令行 Maven 命令的选项。
    • 好的,谢谢,当我运行这个命令并显示zsh: command not found: mvn
    【解决方案5】:

    如果原因有任何问题,请从项目的命令行运行 maven(即 mvn clean package)。您不会看到错误。正如 Christoph Andriessens 所说,它在 IDE 中。

    【讨论】:

      【解决方案6】:

      自 2016 年以来,这个 Bug 在 Eclipse 中就为人所知:

      https://bugs.eclipse.org/bugs/show_bug.cgi?id=506676

      五年多来什么都没有改变。

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 2012-12-11
        • 2021-05-23
        • 2014-05-18
        • 2012-09-11
        • 1970-01-01
        • 2021-05-19
        • 2020-07-07
        相关资源
        最近更新 更多