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

Gradle环境下Neo4j Test Harness 2025.04.0多SLF4J提供者冲突问题

解决SpringBoot 3.5.0 + Neo4j Test Harness 日志冲突问题

问题背景

  • 技术栈:SpringBoot 3.5.0、Spring Data Neo4j 7.5.0,测试依赖Neo4j Test Harness 2025.04.0
  • 启动测试时触发SLF4J多提供者冲突警告:

Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
SLF4J(W): Class path contains multiple SLF4J providers.
SLF4J(W): Found provider [org.neo4j.server.logging.slf4j.SLF4JLogBridge@294e5088]
SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@51972dc7]
SLF4J(W): See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J(I): Actual provider is of type [org.neo4j.server.logging.slf4j.SLF4JLogBridge@294e5088]

  • 尝试排除org.slf4j:slf4j-nop无效;切换到Neo4j Test Harness v5.26.7后,出现新错误:

class org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to class org.apache.logging.log4j.core.LoggerContext

解决方案

1. 处理Neo4j Test Harness 2025.04.0的SLF4J冲突

新版本Neo4j Test Harness自带了SLF4J桥接实现,和SpringBoot默认的Logback冲突。需直接排除Neo4j提供的SLF4J桥接,而非旧版本的slf4j-nop,同时解决spring-jcl的警告。

Maven配置:

<dependency>
    <groupId>org.neo4j.test</groupId>
    <artifactId>neo4j-harness</artifactId>
    <version>2025.04.0</version>
    <scope>test</scope>
    <exclusions>
        <!-- 排除Neo4j自带的SLF4J桥接提供者 -->
        <exclusion>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-slf4j-log-bridge</artifactId>
        </exclusion>
        <!-- 排除commons-logging,消除spring-jcl警告 -->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Gradle配置:

testImplementation('org.neo4j.test:neo4j-harness:2025.04.0') {
    exclude group: 'org.neo4j', module: 'neo4j-slf4j-log-bridge'
    exclude group: 'commons-logging', module: 'commons-logging'
}

2. 处理Neo4j Test Harness v5.26.7的类型转换错误

该版本Harness依赖Log4j,与SpringBoot默认的SLF4J+Logback栈冲突,导致LoggerContext类型不兼容。推荐通过排除Log4j核心依赖、添加Log4j转SLF4J的桥接来统一日志实现。

Maven配置:

<dependency>
    <groupId>org.neo4j.test</groupId>
    <artifactId>neo4j-harness</artifactId>
    <version>5.26.7</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 添加Log4j到SLF4J的桥接依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <scope>test</scope>
</dependency>

Gradle配置:

testImplementation('org.neo4j.test:neo4j-harness:5.26.7') {
    exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
    exclude group: 'org.apache.logging.log4j', module: 'log4j-api'
    exclude group: 'commons-logging', module: 'commons-logging'
}
testImplementation 'org.apache.logging.log4j:log4j-to-slf4j'

3. 验证步骤

  • 执行mvn dependency:tree(Maven)或gradle dependencies(Gradle),检查依赖树,确保仅保留Logback作为SLF4J提供者,无重复日志实现。
  • 启动测试,确认日志警告和类型转换错误均消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:22:51