sbt-jacoco 插件不适用于 Java11 并抛出检测 class 错误

sbt-jacoco plugin does not work with Java11 and throws instrumenting class error

我已将使用 sbt-jacoco 插件的 Scala 应用程序的 java 版本升级到 运行 并检查 scalatest 覆盖率。将 Java8 升级到 Java11 后,我开始收到下面提到的错误,但它在 Java8.

上工作正常
[error] java.io.IOException: Error while instrumenting class MonthTimeTrigger.class.
[error]         at org.jacoco.core.instr.Instrumenter.instrumentError(Instrumenter.java:166)
[error]         at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:117)
[error]         at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:136)

注意: 每当我在 Scala 应用程序中使用任何 Java 代码并尝试 运行 sbt jacoco.

当前scala应用环境

经过一番研究,我才找到解决方案。问题出在 sbt-jacoco 插件本身,因为它不支持 java10 之后的版本。

他们 (sbt-jacoco) 对这个问题做了一些解决方法,可能会在 4.0 版本中修复这些问题。

目前,解决方法是覆盖 plugins.sbtbuild.sbt 中的一些 jacoco 依赖项:

// plugins.sbt
val jacocoVersion = "0.8.5"

dependencyOverrides ++= Seq(
  "org.jacoco" % "org.jacoco.core" % jacocoVersion,
  "org.jacoco" % "org.jacoco.report" % jacocoVersion,
  "org.jacoco" % "org.jacoco.agent" % jacocoVersion)
// build.sbt
val jacocoVersion = "0.8.5"

dependencyOverrides ++= Seq(
  "org.jacoco" % "org.jacoco.core" % jacocoVersion % Test,
  "org.jacoco" % "org.jacoco.report" % jacocoVersion % Test,
  "org.jacoco" % "org.jacoco.agent" % jacocoVersion % Test)

注意: 即使您只覆盖 org.jacoco.core 也可以。