Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多模块maven项目的聚合声纳报告_Java_Maven_Sonarqube_Jacoco_Jacoco Maven Plugin - Fatal编程技术网

Java 多模块maven项目的聚合声纳报告

Java 多模块maven项目的聚合声纳报告,java,maven,sonarqube,jacoco,jacoco-maven-plugin,Java,Maven,Sonarqube,Jacoco,Jacoco Maven Plugin,我有一个类似这样的多模块项目的设置 模块1 | submodule1 | submodule2 我已经在子模块1中编写了一个Junit测试,它也覆盖了子模块2的代码,但是当我尝试在sonar中查看覆盖率时,它显示了子模块2的0%,有没有任何方法可以显示子模块2的覆盖率?此外,我还可以通过运行mvn clean install jacoco:report aggregate生成聚合的xml报告,但如何将聚合的报告提供给sonar?如何设置模块和子模块的pom?我不确定这是否是您正在做的,但我还

我有一个类似这样的多模块项目的设置

模块1

|
 submodule1
|
submodule2

我已经在子模块1中编写了一个Junit测试,它也覆盖了子模块2的代码,但是当我尝试在sonar中查看覆盖率时,它显示了子模块2的0%,有没有任何方法可以显示子模块2的覆盖率?此外,我还可以通过运行mvn clean install jacoco:report aggregate生成聚合的xml报告,但如何将聚合的报告提供给sonar?如何设置模块和子模块的pom?

我不确定这是否是您正在做的,但我还是要说出来。如果您将子模块1创建为“代码”,将子模块2创建为“测试”,那么这是一种可怕的组织方式。测试(特别是单元测试)应该与它正在测试的代码一起存储。因此,每个子模块都有src/main/java和src/test/java

这就是说,您可能有一个“公共库”模块,然后还有依赖于该库的其他模块(例如,应用层)。您很可能在应用层运行测试,并且它调用lib模块中的代码。但是你没有得到代码覆盖的信用。Jacoco对lib的覆盖将完全基于lib中的测试。“应用程序”测试只提供应用程序的覆盖范围。这与jacoco运行时发生的插装有关——它只会插装正在运行的模块的本地内容

是的,有一个jacoco聚合报告,但这会将模块报告合并在一起-每个模块的单个报告。它不能统一覆盖调用lib方法的应用层测试等


最后是声纳。我相信只要你有jacoco文件,声纳扫描仪就会利用它们。我认为它在原始jacoco.exec文件上运行,但可能能够解释jacoco-result.xml或jacoco-aggregate.xml。如果这让你感到悲伤,那么就把你的pom.xml也包括进来吧。我不确定你是不是在做这件事,但我还是要说出来。如果您将子模块1创建为“代码”,将子模块2创建为“测试”,那么这是一种可怕的组织方式。测试(特别是单元测试)应该与它正在测试的代码一起存储。因此,每个子模块都有src/main/java和src/test/java

这就是说,您可能有一个“公共库”模块,然后还有依赖于该库的其他模块(例如,应用层)。您很可能在应用层运行测试,并且它调用lib模块中的代码。但是你没有得到代码覆盖的信用。Jacoco对lib的覆盖将完全基于lib中的测试。“应用程序”测试只提供应用程序的覆盖范围。这与jacoco运行时发生的插装有关——它只会插装正在运行的模块的本地内容

是的,有一个jacoco聚合报告,但这会将模块报告合并在一起-每个模块的单个报告。它不能统一覆盖调用lib方法的应用层测试等


最后是声纳。我相信只要你有jacoco文件,声纳扫描仪就会利用它们。我认为它在原始jacoco.exec文件上运行,但可能能够解释jacoco-result.xml或jacoco-aggregate.xml。如果它给你带来了悲伤,那么把你的pom.xml也包括在内,你是如何称呼Sonar的?专家你是从哪里打电话给Maven的?请参考这篇文章,它会对你有进一步的帮助。你是如何打电话给Sonar的?专家您是从哪里调用Maven的?请参考这一点,这将对您有进一步的帮助。作为JaCoCo开发人员,无法拒绝更正:默认情况下,JaCoCo代理将插入JVM中加载的所有类,而不管它们是从磁盘上的哪个位置(即Maven模块)加载的。因此,由于来自另一个模块的类的调用,可以提供对一个Maven模块的类的“统一”覆盖。作为JaCoCo开发人员,无法抗拒纠正:默认情况下,JaCoCo代理将对JVM中加载的所有类进行插入,而不管这些类是从磁盘上的哪个位置(即Maven模块)加载的。因此,由于来自另一个模块的类的调用,可以提供一个Maven模块的类的“统一”覆盖。