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

BlockHound启动报错排查:NoClassDefFoundError问题咨询

BlockHound启动时NoClassDefFoundError问题排查

你遇到的这个java.lang.NoClassDefFoundError: reactor/core/scheduler/NonBlocking异常,核心原因是Reactor和BlockHound的版本不兼容,我们来一步步拆解问题:

问题根源分析

你配置里的Reactor BOM是Bismuth-RELEASE,这是Reactor比较早期的稳定版本(对应Spring Boot 2.1.x系列),而reactor.core.scheduler.NonBlocking这个类是在Reactor的Dysprosium版本及之后才新增的,Bismuth版本的reactor-core里根本没有这个类。

同时你的BlockHound依赖没有指定版本,也没放在test scope里,Maven会自动拉取最新的BlockHound版本——这些新版本的BlockHound已经依赖了那个新添加的NonBlocking接口,自然就会出现找不到类的错误。

另外你还注释掉了blockhound-junit-platform依赖,这个是在JUnit 5环境下启动BlockHound的必要依赖,没有它的话测试也没法正常触发BlockHound的检测逻辑。

解决方案

根据你的需求,有两种修正方式:

方案一:升级Reactor版本(推荐)

把Reactor BOM升级到和BlockHound兼容的新版本,比如Dysprosium-SR18(适配Spring Boot 2.2.x)或者更晚的版本,同时指定匹配的BlockHound版本,并且修正依赖的scope:

<dependencies>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>1.6.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.6.2</version>
        <scope>test</scope>
    </dependency>
    <!-- 恢复blockhound-junit-platform依赖 -->
    <dependency>
        <groupId>io.projectreactor.tools</groupId>
        <artifactId>blockhound-junit-platform</artifactId>
        <version>1.0.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <!-- 指定兼容的BlockHound版本,放到test scope -->
    <dependency>
        <groupId>io.projectreactor.tools</groupId>
        <artifactId>blockhound</artifactId>
        <version>1.0.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-bom</artifactId>
            <!-- 升级到兼容的Reactor BOM版本 -->
            <version>Dysprosium-SR18</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

方案二:降级BlockHound适配老Reactor

如果你必须保留Bismuth-RELEASE的Reactor版本,那需要使用和它兼容的旧版BlockHound(比如1.0.0.RELEASE),这个版本还没有依赖NonBlocking接口:

<!-- 只修改BlockHound相关依赖 -->
<dependency>
    <groupId>io.projectreactor.tools</groupId>
    <artifactId>blockhound-junit-platform</artifactId>
    <version>1.0.0.RELEASE</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.projectreactor.tools</groupId>
    <artifactId>blockhound</artifactId>
    <version>1.0.0.RELEASE</version>
    <scope>test</scope>
</dependency>

额外注意点

  • BlockHound是用于测试阶段检测异步代码中的阻塞调用,所以一定要把它的依赖scope设置为test,避免打包到生产包中。
  • 确保JUnit版本和BlockHound版本的兼容性,比如你用的JUnit 5.6.2,搭配BlockHound 1.0.x版本是没问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:57:58