【问题标题】:java.lang.NoSuchFieldException error from jacoco来自 jacoco 的 java.lang.NoSuchFieldException 错误
【发布时间】:2020-01-28 09:47:18
【问题描述】:

我正在尝试运行这里提供的 kotlin 代码的测试:https://github.com/ligi/ipfs-api-kotlin with gradlew

我收到了下面列出的错误。 有人能告诉我这个错误是什么意思吗?

> Task :test FAILED
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
Caused by: java.lang.RuntimeException: Class java/lang/UnknownError could not be instrumented.
        at org.jacoco.agent.rt.internal_c13123e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
        at org.jacoco.agent.rt.internal_c13123e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
        at org.jacoco.agent.rt.internal_c13123e.PreMain.createRuntime(PreMain.java:55)
        at org.jacoco.agent.rt.internal_c13123e.PreMain.premain(PreMain.java:47)
        ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
        at java.base/java.lang.Class.getField(Class.java:1999)
        at org.jacoco.agent.rt.internal_c13123e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
        ... 9 more
*** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at  line: 422

【问题讨论】:

  • 你正在使用什么任务?我刚刚在我的机器上运行了一个 ./gradlew clean build,结果是“BUILD SUCCESSFUL”
  • “任务”是什么意思?我安装了 gradle 4.10.2 和 kotlin 1.3.61。我运行:gradle test
  • 我的Java环境是“openjdk版本”11.0.5“2019-10-15”

标签: java kotlin gradlew ipfs


【解决方案1】:

我的 build.gradle 缺少以下内容:

jacoco {
    toolVersion = "0.8.6"
}

虽然很明显,build.gradle 可以从其他 gradle 文件继承属性,但由于我无法弄清楚的原因,jacoco 正在传递到一个子项目,但没有传递到另一个。

【讨论】:

    【解决方案2】:

    确保您使用的是 JDK-11, 如果使用 maven,请确保;

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    

    确保您使用的是最新的 jacoco。

            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.4</version>
    

    【讨论】:

      【解决方案3】:

      修复了此错误将我项目中的 Java SDK 从 14 更改为 11,我的测试开始正常工作。

      解决方案: IntellijIDEA:文件 > 项目结构 > 项目选项卡 > SDK 采用-opendjdk-11(在我的情况下为 Ubuntu)。

      哦!确保 Gradle 设置也使用相同的 JVM!

      希望能帮助到那里的人。

      【讨论】:

        【解决方案4】:

        问题来自 Java 版本,不需要太新。

        sdk 安装 java 19.3.0.2.r8-grl

        一切顺利。

        【讨论】:

          【解决方案5】:

          按照以下步骤操作后它对我来说工作正常。

          在 Eclipse 中,转到 Window--Preferences--java。右键单击已安装的 JRE。那里添加已安装的 JDK 路径并删除其他路径。

          【讨论】:

          • 我在问题中看不到任何表明这是 Eclipse 问题或者甚至正在使用 Eclipse。
          【解决方案6】:

          当我将 jdk1.8 升级到 openjdk11 时遇到了类似的问题,但通过更新 toolVersion = "0.8.6" (used toolVersion = "0.8.1" with jdk1.8) 得到了解决

          【讨论】:

            【解决方案7】:

            在我的情况下,修复是下载并安装 Java 8 (jdk1.8.0_301) 并在项目设置中进行设置

            【讨论】:

              猜你喜欢
              • 2018-08-11
              • 2016-11-25
              • 1970-01-01
              • 2017-04-19
              • 2014-11-21
              • 1970-01-01
              • 2013-06-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多