Quarkus应用SLF4J多绑定冲突及版本兼容问题求助
解决Quarkus应用中SLF4J多绑定与版本冲突问题
问题现象
应用启动时SLF4J输出如下冲突提示:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/.../quarkus-app/lib/main/org.jboss.slf4j.slf4j-jboss-logmanager-2.0.0.Final.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/.../target/quarkus-app/lib/main/org.openpreservation.jhove.jhove-ext-modules-1.30.0.jar!/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.Slf4jLoggerFactory] SLF4J: The requested version 2.0.6 by your slf4j binding is not compatible with [1.6, 1.7] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
冲突来源
问题源于pom.xml中两个外部依赖的SLF4J冲突:
<dependency> <groupId>org.openpreservation.jhove</groupId> <artifactId>jhove-ext-modules</artifactId> <version>1.30</version> </dependency> <dependency> <groupId>org.amqphub.quarkus</groupId> <artifactId>quarkus-qpid-jms</artifactId> <version>2.6.1</version> </dependency>
依赖树排查结果
执行mvn dependency:tree -Dverbose -Dincludes="*.slf4j"排查到jhove-ext-modules的SLF4J依赖链:
[INFO] +- org.openpreservation.jhove:jhove-ext-modules:jar:1.30.0:compile [INFO] | \- org.w3c:epubcheck:jar:5.1.0:compile [INFO] | +- net.sf.saxon:Saxon-HE:jar:11.4:compile [INFO] | | \- org.xmlresolver:xmlresolver:jar:4.4.3:compile [INFO] | | \- org.apache.httpcomponents.client5:httpclient5:jar:5.1.3:runtime [INFO] | | \- (org.slf4j:slf4j-api:jar:2.0.6:runtime - version managed from 1.7.25; omitted for duplicate) [INFO] | +- com.jayway.jsonpath:json-path-assert:jar:2.8.0:compile [INFO] | | +- com.jayway.jsonpath:json-path:jar:2.8.0:runtime [INFO] | | | \- (org.slf4j:slf4j-api:jar:2.0.6:runtime - version managed from 1.7.36; omitted for duplicate) [INFO] | | \- (org.slf4j:slf4j-api:jar:2.0.6:runtime - version managed from 1.7.36; omitted for duplicate) [INFO] | \- org.slf4j:slf4j-nop:jar:1.7.36:compile [INFO] | \- (org.slf4j:slf4j-api:jar:2.0.6:compile - version managed from 1.7.36; omitted for duplicate)
已尝试的无效方案
添加排除规则移除jhove-ext-modules的slf4j-nop依赖,但问题未解决:
<dependency> <groupId>org.openpreservation.jhove</groupId> <artifactId>jhove-ext-modules</artifactId> <version>${org.openpreservation.jhove.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> </exclusion> </exclusions> </dependency>
排除quarkus-qpid-jms的slf4j-jboss-logmanager依赖可正常启动,但希望保留该依赖用于日志输出。
解决思路与建议
- 彻底排除jhove-ext-modules的所有SLF4J实现:错误日志显示jhove-ext-modules自身jar包包含SLF4J绑定类,除了传递的
slf4j-nop,还需排除所有SLF4J相关依赖。修改排除规则为:<dependency> <groupId>org.openpreservation.jhove</groupId> <artifactId>jhove-ext-modules</artifactId> <version>${org.openpreservation.jhove.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> - 强制统一SLF4J版本:在pom的
dependencyManagement块中指定SLF4J API和绑定的版本,与quarkus-qpid-jms依赖的版本保持一致,避免版本不兼容:<dependencyManagement> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.0</version> <!-- 与slf4j-jboss-logmanager:2.0.0匹配 --> </dependency> <dependency> <groupId>org.jboss.slf4j</groupId> <artifactId>slf4j-jboss-logmanager</artifactId> <version>2.0.0.Final</version> </dependency> </dependencies> </dependencyManagement> - 升级jhove-ext-modules版本:检查该依赖是否有更新版本,新版本可能已修复旧版SLF4J依赖冲突问题,替换为兼容的版本。
- 验证Quarkus日志配置:确保Quarkus的日志配置优先使用jboss-logmanager,可在
application.properties中添加配置:quarkus.log.handler.console.enabled=true quarkus.log.category."org.slf4j".level=INFO
内容的提问来源于stack exchange,提问作者Jimbo
相关产品推荐
相关产品推荐

