JaCoCo 在设置 log4j.configurationFactory 系统 属性 后停止工作
JaCoCo stopped working after setting the log4j.configurationFactory system property
JaCoCo 在设置 log4j.configurationFactory
系统后停止工作 属性。
java.lang.reflect.InvocationTargetException
FATAL ERROR in native method: processing of -javaagent failed
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
at org.jacoco.agent.rt.internal_6da5971.PreMain.createRuntime(PreMain.java:55)
at org.jacoco.agent.rt.internal_6da5971.PreMain.premain(PreMain.java:47)
... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
at java.lang.Class.getField(Class.java:1703)
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
... 9 more
Exception in thread "main"
我读到过关于 JaCoCo 和 JDK 1.8 的类似错误,但它已经在 JaCoCo 0.7.7 中解决了。
VM 参数定义如下:
-Dlog4j.configurationFactory=mytest.CustomConfigurationFactory
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dcom.sun.management.jmxremote.rmi.port=9090
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost
-javaagent:/path/jacocoagent.jar=destfile=C:/TEMP/jacoco.exec,jmx=true
我正在使用:
- JaCoCo 0.7.7
- Log4j 2.8.1
- JDK1.8.0_102
有人知道怎么解决吗?
如 JaCoCo users mailing list 中的回答:
当使用 Log4j JDK 日志适配器和 JaCoCo 代理注册时,JaCoCo(截至今天的最新版本为 0.7.9)、JMX 和日志之间的交互似乎存在真正的问题JMX MBean。与此同时,更深入的调查需要一些时间
应将 JaCoCo 代理配置为不注册 JMX MBean,即不使用 jxm=true
或等效地使用 jxm=false
(-javaagent:jacocoagent.jar=jmx=false
),并且应注意JMX 不是远程连接到 JaCoCo 代理的唯一选项 - have a look 在 output=tcpserver
和 output=tcpclient
不应使用 Log4j JDK 日志记录适配器,即没有 ‑Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
更新
这是 JaCoCo 方面的修复票,解释了发生的情况 - https://github.com/jacoco/jacoco/issues/531
JaCoCo 在设置 log4j.configurationFactory
系统后停止工作 属性。
java.lang.reflect.InvocationTargetException
FATAL ERROR in native method: processing of -javaagent failed
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
at org.jacoco.agent.rt.internal_6da5971.PreMain.createRuntime(PreMain.java:55)
at org.jacoco.agent.rt.internal_6da5971.PreMain.premain(PreMain.java:47)
... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
at java.lang.Class.getField(Class.java:1703)
at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
... 9 more
Exception in thread "main"
我读到过关于 JaCoCo 和 JDK 1.8 的类似错误,但它已经在 JaCoCo 0.7.7 中解决了。
VM 参数定义如下:
-Dlog4j.configurationFactory=mytest.CustomConfigurationFactory
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dcom.sun.management.jmxremote.rmi.port=9090
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost
-javaagent:/path/jacocoagent.jar=destfile=C:/TEMP/jacoco.exec,jmx=true
我正在使用:
- JaCoCo 0.7.7
- Log4j 2.8.1
- JDK1.8.0_102
有人知道怎么解决吗?
如 JaCoCo users mailing list 中的回答:
当使用 Log4j JDK 日志适配器和 JaCoCo 代理注册时,JaCoCo(截至今天的最新版本为 0.7.9)、JMX 和日志之间的交互似乎存在真正的问题JMX MBean。与此同时,更深入的调查需要一些时间
应将 JaCoCo 代理配置为不注册 JMX MBean,即不使用
jxm=true
或等效地使用jxm=false
(-javaagent:jacocoagent.jar=jmx=false
),并且应注意JMX 不是远程连接到 JaCoCo 代理的唯一选项 - have a look 在output=tcpserver
和output=tcpclient
不应使用 Log4j JDK 日志记录适配器,即没有
‑Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
更新
这是 JaCoCo 方面的修复票,解释了发生的情况 - https://github.com/jacoco/jacoco/issues/531