【问题标题】:sbt-jacoco plugin does not work with Java11 and throws instrumenting class errorsbt-jacoco 插件不适用于 Java11 并引发检测类错误
【发布时间】:2020-09-12 11:23:38
【问题描述】:

我已经升级了使用sbt-jacoco 插件运行并检查scalatest 覆盖范围的scala 应用程序的java 版本。将 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 版本:1.2.8
  • SBT-Jacoco 插件版本:3.1.0
  • 最新版本:3.0.0
  • Scala 版本:2.12.11
  • Java 版本:11

【问题讨论】:

    标签: java scala sbt jacoco scalatest


    【解决方案1】:

    经过一番研究,我才找到了解决方案。问题在于 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 也可以。

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 2022-01-10
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2014-01-13
      • 2013-02-01
      • 2018-06-09
      相关资源
      最近更新 更多