这是jenkins coverage工作中配置的声纳附加属性:
-Dsonar.jacoco.reportPath = $ {WORKSPACE} /merged_unit.exec
-Dsonar.java.coveragePlugin = jacoco
-Dsonar.dynamicAnalysis = reuseReports
-Dsonar.jacoco.itReportPath = $ {WORKSPACE} /merged_it.exec
我在jenkins上收到以下错误:
詹金斯日志:[错误]无法执行目标 org.sonarsource.scanner.maven:声纳-行家-插件:3.2:声纳 项目aaaa-parent上的(default-cli):不兼容的执行数据 类xxxxxxxxxxxxx,ID为4050af3ab5fc5456。 - > [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:失败 执行目标 org.sonarsource.scanner.maven:声纳-行家-插件:3.2:声纳 项目xxxxx上的(default-cli):类的执行数据不兼容 xxxxxxxxxxxxxxxxxx,ID为4050af3ab5fc5456。在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)at at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)at at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)at org.apache.maven.cli.MavenCli.execute(mavenCli.java:862)at at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)at at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:483)at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
奇怪的是,如果我设置reportPath和itReportPath相同,无论merged_unit.exec还是merged_it.exec,声纳分析都很顺利 但是,如果我设置它应该是什么,则会出现错误。
该项目是多模块的,所以我使用下面的xml进行合并(我只将一个模块放在首位进行测试)
<target name="merge_unit_exec">
<jacoco:merge destfile="/home/qatest/test-script/aaa/unittest/report/merged_unit.exec">
<fileset dir="/home/qatest/jenkins/workspace/aaaa/aaa/target" includes="*.exec" />
</jacoco:merge>
</target>
它阻止了我2天,真的很感谢你的帮助。谢谢
答案 0 :(得分:1)
Incompatible execution data for class
表示执行数据包含两次完全相同的类,但探测次数不同。
因此请检查您到处使用完全相同的最新JaCoCo版本。检查您是否没有附加数据的陈旧exec文件,而它们是使用其他版本的JaCoCo创建的。检查您是否没有非正常终止JVM,这可能导致不完整的exec文件损坏。
在“IllegalStateException: Incompatible execution data for class in…” exception from Jacoco when run for an existing ear和https://github.com/jacoco/jacoco/issues/95
中查看有关同一例外的类似问题答案 1 :(得分:0)
-Dsonar.jacoco.reportPath=${WORKSPACE}/merged_unit.exec
-Dsonar.jacoco.itReportPath=${WORKSPACE}/merged_it.exec
-Dsonar.java.coveragePlugin=jacoco
-Dsonar.dynamicAnalysis=reuseReports
我找到了上面的解决方案,但谁可以给出合理的答案