在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
相关产品推荐
相关产品推荐

