无法将infinispan升级到9.1.0.Final:ClassCastException

时间:2017-07-23 15:10:00

标签: java tomcat logback infinispan infinispan-9

我正在尝试将infinispan从8.2.4.Final升级到9.1.0.Final,但在构建tomcat war-file时从嵌入式slf4j中获得一些错误。

日志:

  

SLF4J:类路径包含多个SLF4J绑定。

     

SLF4J:发现绑定   [罐:文件:/ C:!/tomcat/webapps/ROOT/WEB-INF/lib/infinispan-embedded-9.1.0.Final.jar /org/slf4j/impl/StaticLoggerBinder.class]

     

SLF4J:发现绑定   [罐:文件:/ C:!/tomcat/webapps/ROOT/WEB-INF/lib/logback-classic-1.1.6.jar /org/slf4j/impl/StaticLoggerBinder.class]

     

SLF4J:请参阅http://www.slf4j.org/codes.html#multiple_bindings   解释

     

SLF4J:实际绑定属于类型   [org.jboss.slf4j.JBossLoggerFactory] ​​2017年7月20日16:07:34.170

     

ERROR   [RMI TCP连接(5)-127.0.0.1]   com.myapp.context.LogbackLoggingConfigurator.configureLoggingExternal   从C:\ my-files \ conf \ logback.xml

加载记录器配置      

java.lang.ClassCastException :org.jboss.slf4j.JBossLoggerFactory   无法转换为ch.qos.logback.classic.LoggerContext

日志中提到的代码:

public void configureLogging(final URL config) {
    final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

    try {
        lc.reset();

        final JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(lc);
        configurator.doConfigure(config);
    } catch (final JoranException je) {
        logger.error("Unable to configure logback", je);
    }
    StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
}

错误的行在这里:final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

首先,我从" infinispan-embedded"中排除了slf4j-api。依赖,但没有成功,因为slf4j是硬编码的。

其次,我将<packagingExcludes>WEB-INF/lib/infinispan-embedded-9.1.0.Final.jar!/org/slf4j/impl/StaticLoggerBinder.class</packagingExcludes>添加到maven-war-plugin(可能带有&#39;!&#39;符号我们无法访问嵌套的jar,但我找不到其他变种) 。尝试失败了。

那么,我该如何解决这个异常呢?也许有可能使用maven-shade-plugin?但这对我的项目来说似乎是不可接受的。

2 个答案:

答案 0 :(得分:0)

我有一些问题。我用一招来解决它。我从依赖项中排除了logback。我使用infinispan-embedded作为记录器。但我认为这不是解决问题的正确方法。我想&#34; http://infinispan.org/&#34;开发人员需要将有关logger的代码导出为另一个jar。然后我们可以在maven中排除。实际上由于另一项任务而不是依赖记录器jar的正确方法。

答案 1 :(得分:0)

我有一些问题。我用一招来解决它。我从依赖项中排除了logback。我使用infinispan-embedded作为记录器。但我认为这不是解决问题的正确方法。我认为“http://infinispan.org/”开发人员需要将有关logger的代码导出为另一个jar。然后我们可以在maven中排除。实际上由于另一项任务而不是依赖记录器jar的正确方法。

我写信给infinispan团队,他们快速回应。正如他们所说,infinispan-embedded是“uber-jar”,它意味着“所有依赖于一体”。您可以使用infinispan的每个依赖项而不是它。 infinispan-core和你想要使用的。

点击此链接可以查看已打开问题的详细信息https://developer.jboss.org/message/975209?et=watches.email.thread#975209 在jboss网站上。