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

在sbt的JMH测试中使用java.sql类出现NoClassDefFoundError求助

解决JMH编译时找不到java.sql.Connection的问题

问题根因

Java 9及以后版本启用了模块化系统,java.sql是独立的系统模块。默认情况下,sbt-jmh的编译任务没有显式引入这个模块,导致编译阶段无法找到java.sql.Connection类。

两种可行解决方案

方案一:直接给编译任务添加模块参数

修改你的build.sbt,给JMH相关的编译选项加上--add-modules java.sql:

scalaVersion := "3.3.1"

enablePlugins(JmhPlugin)

// 为JMH的Scala和Java编译任务添加java.sql模块
Jmh / scalacOptions += "--add-modules java.sql"
Jmh / javacOptions += "--add-modules java.sql"

方案二:添加模块读取权限(更严谨的模块化配置)

如果需要遵循模块化规范,还可以额外声明JMH模块对java.sql的读取权限:

scalaVersion := "3.3.1"

enablePlugins(JmhPlugin)

Jmh / compile / scalacOptions ++= Seq(
  "--add-modules java.sql",
  "--add-reads org.openjdk.jmh=java.sql"
)

验证操作

重新执行编译命令:

sbt Jmh/compile

此时编译应该能正常通过,不会再出现NoClassDefFoundError异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:17:14