代码质量

使用SonarCloud(由JHipster自动配置)可以分析代码质量。

将Sonar与JHipster结合使用

JHipster为Sonar提供了特定的Docker Compose配置(这是JHipster Docker Compose文档)),提供了现成的Sonar实例。在项目的根目录下,请运行:

docker-compose -f src/main/docker/sonar.yml up -d

如果您使用的是Maven,则会自动对其进行配置:

./mvnw -Pprod clean verify sonar:sonar -Dsonar.host.url=http://localhost:9001

如果您需要重新运行Sonar阶段,请确保至少指定initialize阶段,因为Sonar属性是从sonar-project.properties文件加载的。

./mvnw initialize sonar:sonar -Dsonar.host.url=http://localhost:9001

如果您使用Gradle,也会自动对其进行配置:

./gradlew -Pprod clean check jacocoTestReport sonarqube -Dsonar.host.url=http://localhost:9001

现在,在每种情况下,如果已经安装了sonar-scanner,则都可以运行分析。

sonar-scanner

分析完成后,它将在Sonar仪表板上可用,默认情况下在 http://127.0.0.1:9001/上可用。

从Jacoco Analysis中排除文件

如果您希望从覆盖率分析中排除某些类(例如,生成的类或应用程序类),并且想要在默认的jacoco html报告中具有正确的覆盖率,则必须从分析和报告中排除这些类。

Maven

您需要将排除项添加到prepare-agentreport单元测试和集成测试的目标中:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco-maven-plugin.version}</version>
    <executions>
        <execution>
            <id>pre-unit-tests</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <!-- Exclude any class named Application from instrumentation -->
                <excludes>**/Application.*</excludes>
                <destFile>${jacoco.utReportFile}</destFile>
            </configuration>
        </execution>
        <execution>
            <id>post-unit-test</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <!-- Exclude any class named Application from reporting-->
                <excludes>**/Application.*</excludes>
                <dataFile>${jacoco.utReportFile}</dataFile>
                <outputDirectory>${jacoco.reportFolder}</outputDirectory>
            </configuration>
        </execution>
        <execution>
            <id>pre-integration-tests</id>
            <goals>
                <goal>prepare-agent-integration</goal>
            </goals>
            <configuration>
                <!-- Exclude any class named Application from instrumentation -->
                <excludes>**/Application.*</excludes>
                <destFile>${jacoco.itReportFile}</destFile>
            </configuration>
        </execution>
        <execution>
            <id>post-integration-tests</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>report-integration</goal>
            </goals>
            <configuration>
                <!-- Exclude any class named Application from reporting-->
                <excludes>**/Application.*</excludes>
                <dataFile>${jacoco.itReportFile}</dataFile>
                <outputDirectory>${jacoco.reportFolder}</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

Gradle

您可以将以下内容添加到sonar.gradle文件中:

test {
    jacoco {
        excludes += ['build/generated/**']
    }
}

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude: [
                    '**/*_.class'
            ])
        })
    }
}

自动分析默认生成的项目

JHipster生成器项目发布一个示例项目,每次在main分支中合并新提交时都会对其进行分析:

JHipster组织下的JHipster示例应用程序分析

这使JHipster团队可以确保您将开始使用尽可能最干净的代码来开发项目。

SonarCloud免费提供此分析。