无法执行目标org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar(default-cli)类

时间:2017-02-08 09:22:52

标签: sonarqube jacoco

这是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天,真的很感谢你的帮助。谢谢

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 earhttps://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

我找到了上面的解决方案,但谁可以给出合理的答案