mockito + jdk11 + sbtでforkの設定をしない、という組み合わせでjava.sqlのclassをmockしようとすると動かない

タイトルでほぼ言い尽くしてますが、いちおう条件改めて詳細に書くと

build.sbt

libraryDependencies += "org.mockito" % "mockito-core" % "2.28.2"

scalaVersion := "2.12.8"

Main.scala

package example

object Main {
  def main(args: Array[String]): Unit = {
    val x = org.mockito.Mockito.mock(classOf[java.sql.Connection])
    println(x)
  }
}
  • sbtは1.2.8(他はまだ試してない)
  • mockitoの最新(2.28.2)。なぜか2.23.0だと動く(なのでscalikejdbcはこのversionから上げてない)
  • fork を trueにすると動く
  • jdk11ではなくjdk8だと動く
  • ひとまずscalikejdbcでかるく確認したのはjava.sql.Connectionなどだが、jdk9以降のmoduleの関係上、java.sql配下のやつ全部だと思う
  • Scalaのversionはたぶん関係ない?(確認したのは2.12.8)

sbtで多少関連するかもしれないissue

それで、誰が悪いのか?というのが難しい(なのでどこかにissueたてずにblog書いてる)わけだが

  • mockito 2.23.0では動いていたのだから、mockitoが悪い?
  • sbtでforkすると動くのだから、sbtでforkしない場合に動かないのはsbtのClassLoaderが悪い?
  • 可能性低いと思ってるが、実はScala自体がjdk9以降のmoduleに完全対応してないのが悪い