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

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

背景:
我们使用SonarQube 4.1.2对使用Maven构建的Java项目执行分析.我们已将问题报告插件1.1安装到服务器上.

我已经在构建控制台中启用了增量报告,并且可以看到使用maven命令从Continuous Integration Server内部正确提供了增量数据:mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -P声纳-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>

从Continuous Integration 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].这说明增量文件正在处理文件的哈希以确定要分析的文件.

我正在从事的项目已生成了未被告知忽略声纳的代码.我推测这会引起更多的用户流失(除了扫描机器生成的代码是一个坏主意之外).为了探索这一理论,我将-Dsonar.exclusions = com / generationpackage / ** / *.java添加到命令中.

更新(2014/07/17)

通过在sonar.exclusions中指定生成的源,减少了为“增量”分析检测到的违规次数.一旦解决了所有问题,问题/违规的数量便与我介绍的本地验证流程的数量相吻合.为了简化此维护,然后使用以下模式简化了所有生成文件的指标:file:** / generated * / **

为了统一起见,我能够在所分析项目的根POM中指定这一点.

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

如上所述,声纳Qube论坛主题解释说,增量分析将仅分析其哈希值与声纳Qube服务器上的哈希文件不匹配的文件.

解决方法:

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

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

这将更改:

mvn clean install -P myProfile

至:

mvn clean install sonar:sonar -P myProfile,sonar 

Maven配置文件可以将声纳目标绑定到验证阶段,以便在添加配置文件时无需指定目标.我选择不绑定插件,以提供更多的灵活性.

这足以使用户验证增量代码.

上一篇:java-sonarqube 4.2和龙目岛


下一篇:Sonar 4.2在同一个项目中分析Java和JavaScript