项目场景:
servers:
Jboss EAP 7.4.8
JDK:
JDK17
jacoco:
测试jacoco-0.7.9 jacoco-0.8.5 jacoco-0.8.8
问题描述
问题1:
Jboss 启动 VM arguments追加, 如下启动参数:
-javaagent:F:\CoverageReport\jacoco-0.7.9\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=0.0.0.0
启动报错
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:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:491)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
at org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
at org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
at org.jacoco.agent.rt.internal_8ff85ea.PreMain.createRuntime(PreMain.java:55)
at org.jacoco.agent.rt.internal_8ff85ea.PreMain.premain(PreMain.java:47)
... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
at java.base/java.lang.Class.getField(Class.java:2117)
at org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
... 9 more
*** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at t:\workspace\open\src\java.instrument\share\native\libinstrument\JPLISAgent.c line: 422
FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed
问题2:
修改VM arguments启动参数:
将-javaagent:
变更为-Djavaagent:
-Djavaagent:F:\CoverageReport\jacoco-0.7.9\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=0.0.0.0
启动无报错
出现新问题, 8044端口未开启
原因分析:
问题2分析
关于
问题2
由于端口无法开启, 不使用Eclipse进行启动
在EAP-7.4.8\bin\standalone.conf
文件中追加如下参数进行
切换为EAP-7.4.8\bin\standalone.bat
方式进行启动
端口还是无法开启
JAVA_OPTS="$JAVA_OPTS -javaagent:F:\CoverageReport\jacoco-0.7.9\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=0.0.0.0"
重新回归Eclipse启动方式
使用-Djavaagent:
命令参数
查看EAP-7.4.8\standalone\log\server.log
发现
查看log发现下面第一个等号前后存在空格
命令变成成key=value
形式
所以导致端口无法开启
javaagent:F:\CoverageReport\jacoco-0.7.9\lib\jacocoagent.jar=
includes=*,output=tcpserver,port=8044,address=0.0.0.0
问题1分析
回归到最初问题
启动报错
使用-javaagent:命令参数
切换jacoco版本jacoco-0.8.5
, 未得到解决
切换jacoco版本jacoco-0.8.8
, 启动成功, 8044端口成功开启
解决方案:
切换jacoco版本
jacoco-0.8.8
, 启动成功, 8044端口成功开启
由于使用JDK17原因导致,启动报错
重点: 使用最新版本软件, 相对应其他软件需要考虑版本兼容问题
查看EAP-7.4.8\standalone\log\server.log
, VM启动参数中存在
VM 参数: -javaagent:F:\CoverageReport\jacoco-0.8.8\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=0.0.0.0
查看cmd命令窗口输入
netstat -aon|findstr "8044"