当前位置: 首页 > 知识库问答 >
问题:

无法看到Jacoco ant和SonarQube的代码覆盖结果

袁奇文
2023-03-14

我想在我的SonarQube 3.2.1中看到测试覆盖率报告。,但是什么也看不到,在我的构建中出现以下错误:

00:11:17.747 INFO  o.s.p.j.JaCoCoPlugin - Analysing /home/jenkins/workspace/.../build/codeCoverageReport/jacoco.exec
00:11:17.795 WARN  o.s.p.j.JaCoCoPlugin - Coverage information was not collected. Perhaps you forget to include debug information into compiled classes?

我执行Jacoco Ant报告任务:

<target name="compile-tests" depends="compile">
  <javac includeantruntime="false"
    debug="true" debuglevel="lines,vars,source"
    executable="${jdk1.5.home}/bin/javac" 
    fork="true"
    srcdir="${src-test.dir}" destdir="${build-test.dir}"
    classpathref="classpath-test"
    encoding="UTF-8"
  />
</target>
<target name="whatever">
  <jacoco:coverage destfile="${workspace.dir}/build/codeCoverageReport/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">
    <junit fork="true" jvm="${jdk1.5.home}/jre/bin/java" printsummary="yes" forkmode="once">
      <classpath>
        <path refid="classpath-test"/>
        <path location="${build-test.dir}"/>
      </classpath>
      <formatter type="plain"/>
      <formatter type="xml"/>
      <batchtest todir="${workspace.dir}/42-SSW/build/tuReport">
        <fileset dir="${src-test.dir}">
          <include name="**/*Test.java"/>
        </fileset>
      </batchtest>
    </junit>
  </jacoco:coverage>
</target>

Jacoco版本是0.5.10.201208310627(由SonarQube 3.2.1使用),在Jenkins的领导下,我用以下配置调用一个独立的声纳分析:

# required metadata
sonar.projectKey=foo.bar
sonar.projectName=baz
sonar.projectVersion=1.0
sonar.verbose=true

# path to source directories (required)
sources=\
42-SSW/log4jAppender/src,\
42-SSW/webservicesCommun/src,\
42-SSW/webservicesMetier/src,\
...

# path to test source directories (optional)
tests=\
42-SSW/log4jAppender/test,\
42-SSW/webservicesCommun/test,\
42-SSW/webservicesMetier/test,\
...

# path to project binaries (optional), for example directory of Java bytecode
binaries=\
42-SSW/log4jAppender/build/jar,\
42-SSW/webservicesCommun/build/jar,\
42-SSW/webservicesMetier/build/jar,\
...

# optional comma-separated list of paths to libraries. Only path to JAR file and path to directory of classes are supported.
libraries=\
40-WAS/wsa/lib/servlet-api.jar,\
40-WAS/wsa/lib/axis.jar,\
...

# Uncomment those lines if some features of java 5 or java 6 like annotations, enum, ...
# are used in the source code to be analysed
sonar.java.source=1.5
sonar.java.target=1.5
sonar.sourceEncoding=UTF-8
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=42-SSW/build/tuReport
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPath=42-SSW/build/codeCoverageReport/jacoco.exec

有什么想法吗?

共有2个答案

燕青青
2023-03-14

在您的错误日志中,它写道:

00:11:17.795 WARN  o.s.p.j.JaCoCoPlugin - Coverage information was not collected. Perhaps you forget to include debug information into compiled classes?

看看你的ant脚本,你似乎用调试信息编译了你的测试源代码。您是否也编译了测试中包含调试信息的源代码?

由于这似乎是一个与Jacoco相关的问题,我还想向您指出Jacoco常见问题:http://www.eclemma.org/jacoco/trunk/doc/faq.html

施自珍
2023-03-14

面临同样的问题。通过做以下修改,我可以在声纳中获得覆盖范围。[注意:在我的例子中是build.xml]

<property name="sonar.core.coveragePlugin" value="jacoco" />
<property name="sonar.junit.reportsPath" value="${build.dir}/test-report"/>
<property name="sonar.jacoco.reportPath" value="${build.dir}/jacoc.exec" />

在“编译”目标中包含调试信息。

<javac srcdir="${src}:${test}" destdir="${bin}" target="1.7" debug="on" 
source="1.7" encoding="cp1252">
<classpath refid="compileclasspath" />
</javac>
 类似资料:
  • 我有一个多模块项目,我似乎无法在Sonarqube上获得准确的单元测试代码覆盖率报告。我使用buildr和JaCoCo生成测试覆盖率。文件继承类似于下面。 项目--module1----reports----Jacoco------Jacoco.cov(jacoco执行文件,以前用作.exec)--module2--reports----Jacoco(生成的HTML、CSV和XML报表文件)---

  • 目前,我可以让sonarqube使用mvn sonar:sonar扫描一些文件,但我永远无法获得代码覆盖率。我浏览了所有文档,并将jacoco包括在我的pom中,并试图设置项目属性以反映代码的结构。我以前没有真正使用过maven,所以这个任务有点难。有人能为我提供一个“像我五岁一样解释”的解决方案吗。我也有多个模块。

  • 我正在致力于集成sonarqube在詹金斯管道。根据https://docs.sonarqube.org/pages/viewpage下面的文档,我已经用opencover使用sonar-csharp启用了sonarqube上的代码覆盖。action?pageid=6389770我还使用了分支插件。当我用/d:sonar.branch.name和/d:sonar.branch.target启动so

  • 问题内容: 我有一个Jenkins项目,对我的NodeJS项目进行SonarQube分析。我添加了对项目的依赖。在Jenkins构建配置中,首先运行一个shell脚本: 这将安装依赖项,运行测试并生成代码覆盖率报告,并生成cobertura-coverage.xml文件。 在shell脚本之后,我运行具有以下属性的代码覆盖: Jenkins作业通过SonarQube仪表板成功运行,该仪表板描述了项

  • Jenkins作业成功地运行了一个SonarQube仪表板,它描述了项目的各种内容,如代码行、技术债务、问题等等。但是单元测试的代码覆盖率并没有显示在SonarQube仪表板上。我确保仪表板有单元测试小部件。 我验证了工作区确实有文件。还检查了构建控制台日志,没有发现bug。我之前也尝试过使用LCOV格式推送代码覆盖率: 即使在Jenkins工作区中生成了覆盖率报告,该报告也不会发布到SonarQ

  • 我正在分析一个经过单元测试和Cobertura覆盖的Java项目。报告了xml。我正在使用SonarQube 4.1.1和最新的SonarRunner。我已经成功地将Cobertura覆盖率结果导入到Sonar 3.2和Ant analyzer,但在这个新版本中,我遇到了问题。在新的声纳分析执行(通过Jenkins)中,我在日志中没有看到它会启动任何Cobertura引擎或任何东西。我在Runne