Sonar和Jacoco:由于没有类文件,因此无法对项目覆盖范围进行JaCoCo分析 [英] Sonar and Jacoco: No JaCoCo analysis of project coverage can be done since there are no class files

查看:720
本文介绍了Sonar和Jacoco:由于没有类文件,因此无法对项目覆盖范围进行JaCoCo分析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Jacoco,Sonar,Maven报告单元测试范围,这是一个springboot项目,请查看我的项目架构,如下所示:

I use Jacoco, Sonar, Maven to report unit test coverage, this is a springboot project and please see my project arch as below:

web
 |-src/test/java --unit test classes
 |-target/
 |-pom.xml
service
 |-pom.xml
pom.xml
target
 |-sonar
 |-jacoco.exec

我在父级pom.xml中的Maven配置:

My maven config in parent pom.xml:

<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.8</version>
                <configuration>
                    <destFile>${project.basedir}/../target/jacoco.exec</destFile>
                    <append>true</append>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

web/pom.xml:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
                <configuration>
                    <skipTests>false</skipTests>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <testFailureIgnore>true</testFailureIgnore>
                    <argLine>${argLine}</argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit4</artifactId>
                        <version>3.0.0-M4</version>
                    </dependency>
                </dependencies>
            </plugin>

第1步:运行mvn clean org.jacoco:jacoco-maven-plugin:0.7.8:prepare-agent package -Dmaven.test.failure.ignore=true -q

文件jacoco.exec是在文件夹target/jacoco.exec

第2步:在cmd下运行:

mvn sonar:sonar -Dsonar.projectKey="projectName" -Dsonar.login={key} -Dsonar.host.url=http://ip:port -Dsonar.jdbc.url=jdbc:postgresql://ip:port/sonar -Dsonar.java.binaries=target/sonar

声纳文件夹已生成

sonar
 |-.sonar_lock
 |-projectName.pdf
 |-report-task.txt

我检查了projectName.pdf,存在声纳分析,但测试覆盖率是0,只有单位测试计数正确,然后我打开Sonarqube,发现测试覆盖率也为0.

I checked projectName.pdf,sonar analysis was there but test coverage was 0, only unit test count is correct, then i open Sonarqube find test coverage also 0.

最后,我检查了声纳记录并发现以下记录:No Jacoco...

Finally, i checked sonar log and found below log: No Jacoco...

mvn sonar:sonar日志:

[INFO] Sensor JaCoCoSensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format).
[INFO] No JaCoCo analysis of project coverage can be done since there are no class files.
[INFO] Sensor JaCoCoSensor [java] (done) | time=1ms
[INFO] Sensor JavaXmlSensor [java]

问题 :

  1. 为什么声纳找不到Jacoco类文件,但找到了jacoco.exec 或其他文件.
  2. 如何在Sonar中生成单元测试范围.
  1. Why sonar couldn't find Jacoco class files, does it find jacoco.exec or other file.
  2. How to genetate unit test coverage in Sonar.

谢谢!

推荐答案

检查后,我解决了此问题.

After checked, i resolved this issue.

解决此问题的关键是声纳参数sonar.java.binaries,此参数是必需的,并且应设置生成字节码的路径,请参见sonarqube doc: https://docs.sonarqube.org/latest/analysis/languages/java/

The key to solve this issue is sonar parameter sonar.java.binaries, this parameter is required and should set the path where your byte code generated, see sonarqube doc: https://docs.sonarqube.org/latest/analysis/languages/java/

sonar.java.binaries (required):

用逗号分隔的包含已编译字节码的目录的路径 与您的源文件相对应的文件.

Comma-separated paths to directories containing the compiled bytecode files corresponding to your source files.

所以我应该做的是更新mvn sonar:sonar的参数,进行更改

So what should i do is to update mvn sonar:sonar's params, change

-Dsonar.java.binaries=target/sonar

Dsonar.java.binaries=target ,目标/声纳没有课程,但目标中有课程.

to Dsonar.java.binaries=target , target/sonar doesn't have classes but in target there are classes.

执行完jacoco分析后,输出为:

After doing that jacoco analysis will run and the output is that:

[INFO] Sensor JaCoCoSensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format).
[INFO] Analysing /Users/rollsbean/workRepo/my-project/common/../target/jacoco.exec
[INFO] Sensor JaCoCoSensor [java] (done) | time=56ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] 1 source files to be analyzed
[INFO] Sensor JavaXmlSensor [java] (done) | time=7ms
...
[INFO] Sensor JaCoCoSensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format).
[INFO] Analysing /Users/rollsbean/workRepo/my-project/web/../target/jacoco.exec
[INFO] Sensor JaCoCoSensor [java] (done) | time=245ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] 1 source files to be analyzed
[INFO] 1/1 source files have been analyzed
[INFO] Sensor JavaXmlSensor [java] (done) | time=206ms
...

仅此而已,希望对您有所帮助.

That's all, hope it will help you.

这篇关于Sonar和Jacoco:由于没有类文件,因此无法对项目覆盖范围进行JaCoCo分析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆