首页 文章

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

提问于
浏览
3

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

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

我在构建控制台中启用了增量报告,并且可以看到使用maven命令从Continuous Integration服务器中正确提供增量数据: 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>

从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

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

Reference Links 作为调查的一部分,我一直在咨询以下链接:

预提交分析的三个选项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

Update (2014/07/16) 注意到这个帖子[http://sonarqube.15.x6.nabble.com/Incremental-run-mode-td5024228.html] . 这解释了增量正在处理文件的散列以确定要分析的文件 .

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

Update (2014/07/17)

通过在sonar.exclusions中指定生成的源,减少了检测到的"incremental"分析的违规次数 . 一旦这些都被解释,问题/违规的数量就与我在本地验证过程所引入的问题数量一致 . 为了简化对此的维护,我使用以下模式简化了所有生成文件的度量标准: file:**/generated*/**

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

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

如上所述,声纳Qube论坛帖子解释说,增量分析只会分析散列与声纳Qube服务器上的散列文件不匹配的文件 .

1 回答

  • 3

    成功使用它的关键是双重的:1)确保在sonarQube服务器上安装了“问题报告”插件2)指定sonar.exclusion以确保排除生成的源

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

    这改变了:

    mvn clean install -P myProfile
    

    至:

    mvn clean install sonar:sonar -P myProfile,sonar
    

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

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

相关问题