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

MacOS环境运行Vertx单元测试报Netty DNS类缺失错误如何解决

问题成因
  • Vert.x 4.0.3依赖的Netty 4.1.x版本,将MacOS平台专属的DNS解析实现、native传输实现拆分为独立的依赖包,Vert.x核心包默认没有传递引入这类平台专属依赖
  • 当在MacOS环境运行涉及域名解析的逻辑时,Netty会优先加载专属的io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider类,类路径缺失对应依赖就会抛出提示,若逻辑强依赖DNS解析结果就会导致单元测试失败
  • Linux环境默认使用Netty内置的通用DNS解析逻辑或epoll原生实现,不存在类缺失问题,因此运行正常
修复方案

提供两种可选择的修复方式:

方案1:添加MacOS专属Netty依赖(推荐,无功能副作用)

你可以通过Gradle的OS检测插件自动适配不同平台的依赖,避免手动区分开发环境:

  1. 在build.gradle的插件配置块添加OS检测插件:
plugins {
    // 保留原有其他插件
    id "com.google.osdetector" version "1.7.0"
}
  1. 在依赖块添加对应Netty依赖,版本需要与Vert.x 4.0.3依赖的Netty版本(4.1.58.Final)对齐,若项目已引入Vert.x依赖管理可省略版本号:
implementation "io.netty:netty-resolver-dns-native-macos:4.1.58.Final:${osdetector.classifier}"

配置完成后重新执行./gradlew clean build即可正常运行单元测试,该配置也兼容Linux、Windows等其他开发环境,不会引入冗余依赖。

方案2:禁用Netty自定义DNS解析(适合临时快速验证)

如果不想修改依赖配置,可在单元测试的JVM启动参数中添加如下配置,强制Vert.x使用JDK默认的DNS解析逻辑:

-Dvertx.disableDnsResolver=true

Gradle中可通过如下配置统一为测试任务添加该参数:

test {
    jvmArgs "-Dvertx.disableDnsResolver=true"
}

该方案仅建议本地开发临时使用,生产环境不推荐配置,避免影响DNS解析性能和稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:45:07