java - 如何使用 Maven 的 sonarQube 在提交之前收集增量分析

标签 java maven sonarqube sonar-runner pre-commit

问题如何使用 Maven 的 sonarQube 在提交前收集增量分析?

背景: 我们正在使用 SonarQube 4.1.2 对使用 Maven 构建的 java 项目执行分析。我们已经在服务器上安装了问题报告插件 1.1。

我在构建控制台中启用了增量报告,可以看到增量数据正在使用 maven 命令从持续集成服务器中正确提供:mvn org.codehaus.mojo:sonar-maven-plugin :2.3.1:sonar -P sonar -Dsonar.java.target=1.7 -Dsonar.java.source=1.7 -Dsonar.profile=MyProfileName -Dsonar.branch=branchID

有一个相关的 Maven 配置文件:

<profile>
    <id>sonar</id>
    <activation>
            <activeByDefault>false</activeByDefault>
    </activation>     
    <properties>
        <sonar.hostname>mySonarHostName</sonar.hostname>
        <sonar.host.url>http://${sonar.hostname}:9000</sonar.host.url>
        <sonar.jdbc.url>jdbc:oracle:thin:@${sonar.hostname}:1521/sabrixdb</sonar.jdbc.url>
        <sonar.jdbc.username>dbusername</sonar.jdbc.username>
        <sonar.jdbc.password>dbpassword</sonar.jdbc.password>
        <sonar.jdbc.driver>oracle.jdbc.driver.OracleDriver</sonar.jdbc.driver>

        <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
        <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    </properties>
</profile>

从持续集成 CI 服务器日志中,我可以按预期在控制台上看到增量报告:

build   14-Jul-2014 15:40:37    [INFO] [15:40:37.699] 
build   14-Jul-2014 15:40:37    
build   14-Jul-2014 15:40:37    -------------  Issues Report  -------------
build   14-Jul-2014 15:40:37    
build   14-Jul-2014 15:40:37            +3 issues
build   14-Jul-2014 15:40:37    
build   14-Jul-2014 15:40:37            +3 major
build   14-Jul-2014 15:40:37    
build   14-Jul-2014 15:40:37    -------------------------------------------
build   14-Jul-2014 15:40:37    
build   14-Jul-2014 15:40:37

当使用以下命令从开发机器调用它进行增量分析时:mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -Dsonar.profile=MyProfileName -Dsonar.branch=branchID -Dsonar.analysis.mode=incremental -Dsonar.host.url=http://mySonarHostName:9000 -Dsonar.issuesReport.html.enable=true -Dsonar.issuesReport.console.enable=true -Dsonar.dynamicAnalysis=reuseReports

我收到一份增量报告,其中包含修改后的代码预计会出现的更多问题。奇怪的是,这里的数量也大于在 sonarQube 服务器上测量的项目问题总数:

-------------  Issues Report  -------------

    +65058 issues

    +42709 major
     +2287 minor
    +20062 info

-------------------------------------------

引用链接 作为调查的一部分,我一直在查阅以下链接:

预提交分析的三个选项 http://www.sonarqube.org/three-options-for-pre-commit-analysis/

SonarQube 中的分析与预览与增量预览 http://www.sonarqube.org/analysis-vs-preview-vs-incremental-preview-in-sonarqube/

问题报告插件 http://docs.sonarqube.org/display/SONAR/Issues+Report+Plugin

CodeHaus Sonar Maven 插件 http://mojo.codehaus.org/sonar-maven-plugin/plugin-info.html

更新 (2014/07/16) 注意到这个线程 [ http://sonarqube.15.x6.nabble.com/Incremental-run-mode-td5024228.html] .这解释了增量正在处理文件的哈希以确定要分析的文件。

我正在从事的项目生成了 Sonar 未被告知要忽略的代码。我假设这会导致额外的流失(除了扫描机器生成的代码只是一个坏主意)。为了探索这个理论,我将 -Dsonar.exclusions=com/generatedpackage/**/*.java 添加到命令中。

更新(2014/07/17)

通过在 sonar.exclusions 中指定生成的源,减少了为“增量”分析检测到的违规次数。一旦这些都被考虑在内,问题/违规的数量就会与我在本地验证流程时引入的问题数量保持一致。为了简化维护,然后我使用以下模式简化了所有生成文件的抑制指标:file:**/generated*/**

为了统一,我能够在所分析项目的根 POM 中指定它。

<sonar.exclusions>file:**/generated*/**</sonar.exclusions>

如上所述,sonar Qube 论坛帖子解释说,增量分析将仅分析哈希与 sonar Qube 服务器上的哈希文件不匹配的文件。

最佳答案

成功使用它的关键有两个: 1) 确保问题报告插件安装在 sonarQube 服务器上 2) 指定 sonar.exclusion 以确保生成的源被排除在外

有了这个和一个“Sonar ”配置文件,用户只需要将这个“Sonar ”配置文件和 Sonar : Sonar 目标添加到maven命令中

这改变了:

mvn clean install -P myProfile

收件人:

mvn clean install sonar:sonar -P myProfile,sonar 

maven 配置文件可以将 Sonar 目标绑定(bind)到验证阶段,以便在添加配置文件时省略指定目标的需要。我选择不绑定(bind)插件以提供更多的灵 active 。

这足以让用户验证增量代码。

关于java - 如何使用 Maven 的 sonarQube 在提交之前收集增量分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790626/

相关文章:

java - 两个键如何在哈希中产生相同的值?

java - 通过 .jar 文件使用时 Log4j 不显示行日志记录

java - Maven war 插件 : Specify Regular Expression to exclude libraries within web-inf/lib

java - mvn Sonar :sonar throwing error

java - 如何在 sonarqube 5.1+ 中添加自定义规则

java - 重新运行 SonarQube 失败。 "Unable to create root temp directory"

java - 我们可以对 Sonar 的 PMD 插件和 Eclipse 的 PMD 插件使用相同的抑制警告吗?

java - 模拟由静态方法初始化的类

android - Android 中的 play-services-base 与 -basement 依赖关系 (AAR)

java - 解析 java.text.SimpleDateFormat 时获取 java.lang.IllegalArgumentException : Illegal pattern character 'o' ?