JaCoCo命令行界面(CLI)报告生成导致:由以下原因引起:java.lang.IllegalStateException:已检测到类$Class
我使用JUnit来测试我的代码并访问私有方法/字段,我使用的反射与JaCoCo动态检测不兼容;因此,我开始做离线检测 我使用以下命令执行离线检测:JaCoCo命令行界面(CLI)报告生成导致:由以下原因引起:java.lang.IllegalStateException:已检测到类$Class,java,junit,report,code-coverage,jacoco,Java,Junit,Report,Code Coverage,Jacoco,我使用JUnit来测试我的代码并访问私有方法/字段,我使用的反射与JaCoCo动态检测不兼容;因此,我开始做离线检测 我使用以下命令执行离线检测: java.exe \ -jar C:\jacoco\jacococli.jar \ instrument \ C:\project\main\main.jar \ --dest C:\project\coverage 在此之后,我在这里结束了插入仪器的JAR: C:\project\coverage\main.jar 然后在我提
java.exe \
-jar C:\jacoco\jacococli.jar \
instrument \
C:\project\main\main.jar \
--dest C:\project\coverage
在此之后,我在这里结束了插入仪器的JAR:
- C:\project\coverage\main.jar
C:\jacoco\jacocoagent.jar;C:\project\coverage\main.jar;...
这似乎很好,因为我最终得到了我期望的jacoco.exec文件
当我尝试使用以下命令生成此jacoco.exec文件的报告时:
java.exe \
-jar C:\jacoco\jacococli.jar \
report \
C:\project\coverage\jacoco.exec \
--classfiles C:\project\coverage\main.jar \
--html C:\project\coverage\report
然后,我收到此错误消息:
Exception in thread "main" java.io.IOException: Error while analyzing C:\project\coverage\main.jar@my/package/MyClass.class.
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzerError(Analyzer.java:166)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:138)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:161)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:197)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeZip(Analyzer.java:269)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:200)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:230)
at org.jacoco.cli.internal.commands.ClassInfo.execute(ClassInfo.java:58)
at org.jacoco.cli.internal.Main.execute(Main.java:89)
at org.jacoco.cli.internal.Main.main(Main.java:104)
Caused by: java.lang.IllegalStateException: Class my/package/MyClass is already instrumented.
at org.jacoco.cli.internal.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:176)
at org.jacoco.cli.internal.core.internal.analysis.ClassAnalyzer.visitField(ClassAnalyzer.java:85)
at org.jacoco.cli.internal.asm.ClassVisitor.visitField(ClassVisitor.java:294)
at org.jacoco.cli.internal.asm.ClassReader.readField(ClassReader.java:883)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:694)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:500)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:120)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:136)
... 8 more
为什么,当我尝试生成报告时,会收到有关已插入指令的类的错误消息?啊哈!我刚刚发现我应该使用非仪器化的JAR来生成报告
java.exe \
-jar C:\jacoco\jacococli.jar \
report \
C:\project\coverage\jacoco.exec \
--classfiles C:\project\main\main.jar \
--html C:\project\coverage\report
注意:main\main.jar而不是coverage\main.jar
我通过尝试运行以下命令发现了这一点:
java.exe \
-jar C:\jacoco\jacococli.jar \
classinfo \
C:\project\coverage\main.jar
产生了相同的错误:
Caused by: java.lang.IllegalStateException: Class my/package/MyClass is already instrumented.
我在这里发布了这个bug,希望能够改进消息传递: