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

Spring JCL与commons-logging.jar冲突排查求助

解决Spring 6.1.5 + Java 17下Spring-JCL与Commons Logging冲突问题

问题根源分析

你遇到的报错是因为Spring-JCL(Spring的日志适配层)检测到类路径中存在Commons Logging的发现机制,但通过mvn dependency:tree未找到显式依赖,大概率是第三方依赖内置了Commons Logging类,或是你对spring-jcl的排除方式错误导致适配逻辑异常。


具体修复步骤

1. 恢复spring-core对spring-jcl的依赖

你当前在spring-core中排除了spring-jcl,这是错误的。Spring 6的spring-jcl是日志适配核心,会自动优先适配SLF4J,无需排除。移除该排除规则:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
    <!-- 移除以下exclusions块 -->
    <!-- <exclusions>
        <exclusion>
            <groupId>spring-jcl</groupId>
            <artifactId>spring-jcl</artifactId>
        </exclusion>
    </exclusions> -->
</dependency>

2. 全局排除所有Commons Logging依赖

在dependencyManagement中添加全局排除,确保任何第三方依赖引入的commons-logging都被拦截:

<dependencyManagement>
    <dependencies>
        <!-- 新增全局排除commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
            <scope>provided</scope> <!-- 标记为provided,避免被引入 -->
        </dependency>

        <!-- 你的其他依赖... -->
    </dependencies>
</dependencyManagement>

也可以在特定依赖中显式排除,比如旧版本的axis:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 确保jcl-over-slf4j的加载优先级

在pom.xml的<dependencies>节点(而非dependencyManagement)中显式声明jcl-over-slf4j,让它在类路径中优先加载:

<dependencies>
    <!-- 显式声明,确保优先生效 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.36</version>
    </dependency>

    <!-- 你的其他依赖... -->
</dependencies>

4. 可选:直接切换到SLF4J API(彻底规避JCL问题)

将代码中的Commons Logging API替换为SLF4J,从根源上绕过JCL适配逻辑:

// 替换原有导入
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static Logger log = LoggerFactory.getLogger(BaseBatchProcess.class);

验证修复

执行以下命令清理并重新构建项目,确保依赖生效:

mvn clean install -U

启动项目后检查日志,确认报错消失。

内容的提问来源于stack exchange,提问作者Rocky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:07:04