You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:21