spring 如何从代码覆盖率中排除某些类?(Java)

eagi6jfj  于 2023-09-29  发布在  Spring
关注(0)|答案(5)|浏览(180)

我已经可以通过在POM文件的标记中添加这个来排除带有声纳立方体报告的类。

<properties>
        <java.version>1.8</java.version>
        <sonar.exclusions> 
            /src/main/java/com/example/org/test/mainpackage/message/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/security/jwt/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/security/services/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/controller/AuthRestAPIs.java
            ,
            /src/main/java/com/example/org/test/mainpackage/controller/TestRestAPIs.java
        </sonar.exclusions>
    </properties>

然而,当在本地运行相同的代码来测试代码覆盖率时,根本不起作用。
我在哪里用Maven和Sping Boot 编程设置这个?.
我已经可以通过
设置>构建、执行、部署>排除> [要排除的类]
或通过
编辑配置>选择代码覆盖率选项卡>然后添加我希望在代码覆盖率报告中排除或仅包括的包或类。
我想要的是编码的类被排除,即在pom文件中,就像我做的那样,排除了sonar qube的代码。
长话短说。我如何以编程方式做到这一点?.
我之所以想以编程方式实现这一点,是因为我在代码覆盖率报告中排除文件的上述两个步骤是,我的项目中没有任何文件可以推送到存储库中,因此我为排除所做的更改将反映在所有从git存储库中拉取的文件中。没有文件或配置添加,我可以推和反映到所有的仓库。这意味着我的排除将只在本地工作,而不是对其他工作。对吗?。所以我在这里要求一种方法来做编程一样,把排除在一个POM文件。

dsekswqp

dsekswqp1#

当您使用Maven时,您需要在jacoco插件中配置排除项,该插件用于捕获覆盖率统计数据并将其传递给sonar。

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<executions>
        <execution>
            <id>prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <!-- Sets the path to the file which contains the execution data. -->
                <dataFile>target/jacoco.exec</dataFile>
                <!-- Sets the output directory for the code coverage report. -->
                <outputDirectory>target/jacoco-ut</outputDirectory>
            </configuration>
        </execution>
</executions>
<configuration>
    <systemPropertyVariables>
        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
    </systemPropertyVariables>
    <excludes>
        <exclude>snmaddula/app/domain/*.class</exclude>
        <exclude>snmaddula/app/exception/*.class</exclude>
        <exclude>snmaddula/app/filter/*.class</exclude>
        <exclude>snmaddula/app/App.class</exclude>
    </excludes>
</configuration>
</plugin>

参考文献:

kpbwa7wx

kpbwa7wx2#

这不是我真正想要的答案。但现在这对我来说就够了。仍然在寻找一种通过pom文件,java或bean来实现这一点的方法。谢谢

解决方案:

因此,如果您在项目的“运行配置”中进行了排除。这是我在问题中提到的第二步,即通过
编辑配置>代码覆盖率。

然后实际上添加您的排除。您只需勾选共享文本框并单击应用。您所做的排除将在您的项目目录下提供
.idea/runConfigurations/[您所做的排除和其他运行配置的xml文件]。

为了能够推动这个,只要移除
.idea在你的.gitignore文件中。

然后,您就可以将运行配置文件推送到您的存储库中供其他人使用。或导出,这样就不必在intellij的编辑配置中手动配置。
PS:这可能会影响您的Sonarqube中的覆盖报告。你必须撤销这一点,并从你的存储库中取消本地运行配置,以便能够使用你的sonar qubes类排除。出于某种原因,在我的,它跳过了所有的排除我做这之前。

cyej8jka

cyej8jka3#

application.properties中,您可以执行以下操作:

sonar.exclusions=src/main/java/com/example/org/test/mainpackage/message/**/*, 
src/main/java/com/example/org/test/mainpackage/security/jwt/**/*, 
src/main/java/com/example/org/test/mainpackage/security/services/**/*,
src/main/java/com/example/org/test/mainpackage/controller/AuthRestAPIs.java,
src/main/java/com/example/org/test/mainpackage/controller/TestRestAPIs.java

此外,其他方式将登录为管理员在声纳和去
设置>排除>源文件排除-在此处添加您的软件包。重新启动服务器。

tpxzln5u

tpxzln5u4#

默认情况下,Intellij使用Intellij IDEA作为默认的代码覆盖率运行器。
如果您使用的是jacoco,则将此选项更改为JaCoCo。详情请访问jetbrains网站。https://www.jetbrains.com/help/idea/configuring-code-coverage-measurement.html
按照上面的步骤,<sonar.coverage.exclusions>中定义的所有排除类都将被考虑在内,并与远程SonarQube服务器配置中的类匹配。

fslejnso

fslejnso5#

从JaCoCo 0.8.2开始,你可以使用注解来从覆盖范围中排除类或方法。
注解的名称应包括Generated。注解的保留策略应为运行时或类。
如果你使用lombok项目,只需要使用来自lombok. Generated包的注解@Generated即可。
如果你不使用lombok项目,你可以创建自己的注解。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target( {ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface Generated {
}

在创建了这个注解之后,只需要在您想要从覆盖率报告中排除的类或方法上使用它。
来源:https://www.baeldung.com/jacoco-report-exclude

相关问题