java - 类 ch.qos.logback.classic.LoggerContext 没有实现请求的接口(interface) org.slf4j.ILoggerFactory

标签 java eclipse maven eclipse-plugin

在安装了我自己的插件的情况下启动 Maven 项目向导时,会导致控制台出现此错误并且无法启动向导。

Caused by: java.lang.IncompatibleClassChangeError: Class ch.qos.logback.classic.LoggerContext does not implement the requested interface org.slf4j.ILoggerFactory
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
        at org.eclipse.m2e.core.internal.MavenPluginActivator.<init>(MavenPluginActivator.java:87)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.loadBundleActivator(BundleContextImpl.java:758)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:711)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:932)
        at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
        at org.eclipse.osgi.container.Module.doStart(Module.java:581)

我的研究结果与不同版本的 slf4j jar 的多重绑定(bind)有关?我的插件是一个 Maven 项目,pom.xml 包含以下项目:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.5</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.5</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.5</version>
</dependency>

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

知道错误发生的原因或需要更多信息吗?

最佳答案

我知道这是一个老问题,但也许这会帮助其他人尝试解决此问题。

IncompatibleClassChangeError 错误是 SLF4J 寻找实现以满足其 ILoggerFactory API 接口(interface)的结果。

根据提供的 pom.xml 文件,我猜测“log4j-slf4j-impl”中的 StaticLoggerBinder 正在尝试使用“logback-classic”作为实现。

您可以尝试使用“slf4j-simple”作为“slf4j-api”的实现来解决这个问题。但是,slf4j-simple 仅记录标准错误/输出。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.10</version>
</dependency>

关于java - 类 ch.qos.logback.classic.LoggerContext 没有实现请求的接口(interface) org.slf4j.ILoggerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43542610/

相关文章:

maven - Docker Jenkins集成

java - 检查 Class 对象是否是 Java 中另一个 Class 对象的子类型?

java - 在 Liberty Server 上运行 spring-boot 应用程序

java - 如何在按钮单击时显示不同的字符串

android - 无法使用 Jelly Bean 在手机上通过 eclipse 进行调试

java - Maven:仅在特定的 git 分支上运行任务

eclipse - Maven 没有找到 Scala 测试

java - 如何使用扫描仪类将值获取到字符数组中?

java - 为什么允许 "extends T"但不允许 "implements T"?

c++ - 获取 2 个错误消息 Eclipse 编译器 : non static member and error 2