我正在尝试将 infinispan 从 8.2.4.Final 升级到 9.1.0.Final,但是在构建 tomcat 战争文件时从嵌入式 slf4j 中得到一些错误。
日志:
SLF4J:类路径包含多个 SLF4J 绑定。
SLF4J:在 [jar:file:/C:/tomcat/webapps/ROOT/WEB-INF/lib/infinispan-embedded-9.1.0.Final.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定
SLF4J:在 [jar:file:/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] 20-Jul-2017 16:07:34.170
错误 [RMI TCP Connection(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 中(可能带有“!”符号我们无法访问嵌套 jar,但我没有找到其他变体)。尝试失败。
那么,我该如何解决这个异常呢?也许可以使用 maven-shade-plugin?但这对我的项目来说似乎是不可接受的。