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

Jacoco 0.8.7显示代码覆盖率为零

景鹏云
2023-03-14

我看到詹金斯插件中的代码覆盖率为零。我在客户端服务器模式下使用 Jacoco 0.8.7。客户端是詹金斯,服务器(此处存在jaco代理jar)是一个VM。当我使用旧版本的jaco 0.7.4时,这并没有发生。

Jenkins CI日志-

18:43:34 [INFO] Executing tasks
18:43:34 
18:43:34 main:
18:43:34      [echo] Generating JaCoCo Reports
18:43:34     [mkdir] Created dir: /testingService-ci-8554/workspace/job/target/coverage-report
18:43:34    [report] Loading execution data file /testingService-ci-8554/workspace/job/target/jacoco.exec
18:43:35    [report] Writing bundle 'testingService' with 4 classes
18:43:35 [INFO] Executed tasks
18:43:35 [INFO] ------------------------------------------------------------------------
18:43:35 [INFO] BUILD SUCCESS
18:43:35 [INFO] ------------------------------------------------------------------------
18:43:35 [INFO] Total time:  6.102 s
18:43:35 [INFO] Finished at: 2022-07-19T06:13:35-07:00
18:43:35 [INFO] ------------------------------------------------------------------------
18:43:36 Publishing Coverage report....
18:43:40 report /var/lib/jenkins/jobs/job/builds/34/jacoco.exec for Jacoco has met some errors: net.sf.saxon.trans.XPathException: I/O error reported by XML parser processing file:/var/lib/jenkins/jobs/job/builds/34/jacoco.exec: Invalid byte 1 of 1-byte UTF-8 sequence.
18:43:40 A total of 0 reports were found
18:43:40 [GitHub Checks] Causes for no suitable publisher found: 
18:43:40 [GitHub Checks] Trying to resolve checks parameters from GitHub SCM...
18:43:40 [GitHub Checks] Job does not use GitHub SCM
18:43:40 [GitHub Checks] Trying to resolve checks parameters from Git SCM...
18:43:40 [GitHub Checks] No credentials found
18:43:40 [GitHub Checks] Job does not have valid credentials
18:43:40 [Checks API] No suitable checks publisher found.
18:43:40 [htmlpublisher] Archiving HTML reports...
18:43:40 [htmlpublisher] Archiving at BUILD level /testingService-ci-8554/workspace/job/target/coverage-report/html to /var/lib/jenkins/jobs/job/builds/34/htmlreports/Coverage_20Report
18:43:40 [JaCoCo plugin] Collecting JaCoCo coverage data...
18:43:40 [JaCoCo plugin] **/**.exec;**/classes;**/src/main/java; locations are configured
18:43:43 [JaCoCo plugin] Number of found exec files for pattern **/**.exec: 1
18:43:43 [JaCoCo plugin] Saving matched execfiles:  /testingService-ci-8554/workspace/job/target/jacoco.exec
18:43:46 [JaCoCo plugin] Saving matched class directories for class-pattern: **/classes: 
18:43:47 [JaCoCo plugin]  - /testingService-ci-8554/workspace/job/cronus/scripts/app/classes 5 files
18:43:47 [JaCoCo plugin]  - /testingService-ci-8554/workspace/job/target/classes 5 files
18:43:50 [JaCoCo plugin] Saving matched source directories for source-pattern: **/src/main/java: 
18:43:50 [JaCoCo plugin] Source Inclusions: **/*.java
18:43:50 [JaCoCo plugin] Source Exclusions: 
18:43:50 [JaCoCo plugin] - /testingService-ci-8554/workspace/job/Runner/tests/fixtures/SampleProjects/helixProject/functionalTests/src/main/java 1 files
18:43:50 [JaCoCo plugin] - /testingService-ci-8554/workspace/job/testingServiceService/src/main/java 4 files
18:43:50 [JaCoCo plugin] Loading inclusions files..
18:43:50 [JaCoCo plugin] inclusions: []
18:43:50 [JaCoCo plugin] exclusions: []
18:43:50 [JaCoCo plugin] Thresholds: JacocoHealthReportThresholds [minClass=0, maxClass=0, minMethod=0, maxMethod=0, minLine=0, maxLine=0, minBranch=0, maxBranch=0, minInstruction=0, maxInstruction=0, minComplexity=0, maxComplexity=0]
18:43:50 [JaCoCo plugin] Publishing the results..
18:43:50 [JaCoCo plugin] Loading packages..
18:43:50 [JaCoCo plugin] Done.
18:43:50 [JaCoCo plugin] Overall coverage: class: 0, method: 0, line: 0, branch: 100, instruction: 0

Jenkins CI插件配置是这样的。使用ant和maven组合来转储exec文件。

echo '''
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.paypal</groupId>
  <artifactId>CodeCoverage</artifactId>
  <version>0.0.1</version>
  <build>
    <plugins>
      <!-- Dependencies -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <!-- Copy the ant tasks jar. Needed for ts.jacoco.report-ant . -->
          <execution>
            <id>jacoco-dependency-ant</id>
            <goals>
              <goal>copy</goal>
            </goals>
            <phase>process-test-resources</phase>
            <inherited>false</inherited>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.jacoco</groupId>
                  <artifactId>org.jacoco.ant</artifactId>
                  <version>0.8.7</version>
                </artifactItem>
              </artifactItems>
              <stripVersion>true</stripVersion>
              <outputDirectory>${basedir}/target/jacoco-jars</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.7</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>dump</goal>
            </goals>
            <configuration>
              <reset>${Reset}</reset>
              <address>${jacocoAgentHost}</address>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- Ant plugin. -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>report</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <property environment="env" />
                <!-- Execute an ant task within maven -->
                <echo message="Generating JaCoCo Reports" />
                <taskdef name="report" classname="org.jacoco.ant.ReportTask">
                  <classpath path="${basedir}/target/jacoco-jars/org.jacoco.ant.jar" />
                </taskdef>
                <mkdir dir="${basedir}/target/coverage-report" />
                <report>
                  <executiondata>
                    <fileset dir="${basedir}/target">
                      <include name="jacoco.exec" />
                    </fileset>
                  </executiondata>
                  <structure name="Raptor Coverage Project">
                    <group name="${env.appName}">
                      <classfiles>
                        <fileset dir="target/classes">
                        <exclude name=""/>

                        </fileset>
                      </classfiles>
                      <sourcefiles encoding="UTF-8">
                        <fileset dir="target/sources" />
                      </sourcefiles>
                    </group>
                  </structure>
                  <html destdir="${basedir}/target/coverage-report/html" />
                  <xml destfile="${basedir}/target/coverage-report/coverage-report.xml" />
                  <csv destfile="${basedir}/target/coverage-report/coverage-report.csv" />
                </report>
              </target>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>org.jacoco.ant</artifactId>
            <version>0.8.7</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>''' > jacoco_pom.xml

共有1个答案

徐德海
2023-03-14

1字节UTF-8序列的无效字节1”;建议使用错误的文件格式,通常是BOM。检查使用文件是否正确。

您可以指定文件/路径/收件人/文件名.txt。第一种可能是当存在 BOM(字节顺序标记)时您会看到的内容,这将产生错误:1 字节 UTF-8 序列的字节 1 无效。

第二个是同一个文件,没有BOM转换。

$ file jacoco.exec
jacoco.exec: Unicode text, UTF-8 (with BOM) text

$ file jacoco.exec
jacoco.exec: ASCII text

一旦你确定格式不正确,就要由你来决定如何以这种方式结束以及如何修复。很可能是在操作系统之间移动文件的转换问题。

您是在混合环境中运行还是已经从Win转移到Linux(或Mac;不知道)?

顺便说一下:Jacoco
Release 0.7.4(2015/02/26)
Release 0.8.7(2021/05/04)
包含了很多更改,从Java8到Java18支持,到maven 3的更改,从ASM 5.0.1到ASM 9.3,很难说为什么它不再接受,假设你改变的只是Jacoco版本(从来都不是一件事)。

 类似资料:
  • Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本

  • 声纳投射物。特性 sonar.projectname=test sonar.language=js sonar.sources=src sonar.tests=src/app/client/src/app/sonar.javascript.lcov.reportpaths=src/app/client/src/app/sonar.javascript.lcov.reportpaths=src/ap

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

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

  • 这是一个重要的可量化指标,如果代码覆盖率很高,你就可以放心的修改代码,在发版本的时候也能睡个安稳觉。否则就是拆东墙补西墙,陷入无尽的 bug 诅咒中。 那么在 OpenResty 里面如何看到代码覆盖率呢?其实很简单,使用 LuaCov 可以很方便的实现。 我们先了解下 LuaCov,这是一个针对 Lua 脚本的代码覆盖率工具,通过 luarocks 来安装: luarocks install l

  • 索纳库贝:8.2。0.32929 声纳扫描仪:3.0。3.778 雅科科:0.8。4 jdk:1.8 mvn:3.6。三, 你想达到什么目标 我试图通过使用sonar scanner实现代码覆盖率,但在sonarqube仪表板中获得代码覆盖率0。 到目前为止,您是如何实现这一目标的 我使用https://github.com/SonarSource/sonar-scanning-examples/