zoukankan      html  css  js  c++  java
  • 使用 Gradle 插件进行代码分析(转)

    代码分析在大多数项目中通常是作为最后一个步骤(如果做了的话)完成的。其通常难以配置及与现有代码整合。

    本文旨在勾勒出使用 Gradle 整合 PMD 与 FindBugs 的步骤,并将其与一个现有的 Sonar 构建工具进行整合。

    PMD、CheckStyle 和 FindBugs

    首先要做的就是在我们的 build.gradle 文件中添加插件:

    1
    2
    3
    apply plugin: 'checkstyle'
    apply plugin: 'pmd'
    apply plugin: 'findbugs'

    这些插件能在我们的代码中启用 PMD、CheckStyle 和 FindBugs。

    ostatsu
    ostatsu
    翻译于 1个月前

    1人顶

     

     翻译的不错哦!

    默认情况下,这些插件将对测试程序和主程序都进行分析。对于我们,需要避免在测试程序上运行FindBugs和PMD,我们使用如下命令:

    1
    2
    3
    4
    5
    6
    findbugs{
        findbugsTest.enabled=false
    }
    pmd {
        pmdTest.enabled=false
    }

    下面,我们从Gradle中执行:

    1
    ./gradlew clean findBugsMain pmdMain

    这将对工程进行清理,然后对源代码执行FindBugs和PMD。

    输出结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    :clean
    :compileJava
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    :processResources
    :classes
    :findbugsMain FAILED
     
    FAILURE: Build failed with an exception.
     
    * What went wrong:
    Execution failed for task ':findbugsMain'.
    > FindBugs rule violations were found. See the report at: file:///myprojects/build/reports/findbugs/main.xml
     
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
     
    BUILD FAILED
     
    Total time: 24.597 secs

    由于违背FindBugs规则,还没运行PMD构建已经失败。FindBugs和PMD的输出格式为XML。 

    结果报告保存在<proj_home>/build/reports文件夹。

    社会主义好
    社会主义好
    翻译于 1周前

    1人顶

     

     翻译的不错哦!

    为了生成可读的HTML文档并忽略错误继续构建,我们在build.gradle文件中加入:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    findbugs{
        ignoreFailures=true
        findbugsTest.enabled=false
     
    }
     
    tasks.withType(FindBugs) {
        reports {
            xml.enabled = false
            html.enabled = true
        }
    }
    tasks.withType(Pmd){
        reports{
            xml.enabled=true
            html.enabled=true
        }
    }
    pmd {
       ignoreFailures = true
        pmdTest.enabled=false
    }

    task.withType用于对每种任务进行配置,您可以对PMD启用HTML和XML报告,对FindBugs启用HTML报告。

    注意:在输出报告时,FindBugs仅支持一种可用的输出格式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ./gradlew clean findBugsMain pmdMain
    :clean
    :compileJava
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    :processResources
    :classes
    :findbugsMain
    FindBugs rule violations were found. See the report at: file:///myprojects/build/reports/findbugs/main.html
    :pmdMain
    Removed misconfigured rule: LoosePackageCoupling  cause: No packages or classes specified
    Removed misconfigured rule: LoosePackageCoupling  cause: No packages or classes specified
    174 PMD rule violations were found. See the report at: file:///myprojects/build/reports/pmd/main.html
     
    BUILD SUCCESSFUL
     
    Total time: 6.013 secs

    对于PMD,您可以使用ruleSet选项设置规则集。下面是一些常用的规则集。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    pmd {
       ignoreFailures = true
        pmdTest.enabled=false
        ruleSets = [
                'java-basic',
                'java-braces',
                'java-clone',
                'java-codesize',
                'java-comments',
                'java-controversial',
                'java-coupling',
                'java-design',
                'java-empty',
                'java-finalizers',
                'java-imports',
                'java-optimizations',
                'java-strictexception',
                'java-strings',
                'java-typeresolution',
                'java-unnecessary',
                'java-unusedcode'
        ]
    }

    一个输出示例如下:

    Image title

    Image title

    社会主义好
    社会主义好
    翻译于 1周前

    0人顶

     

     翻译的不错哦!

    与Sonar整合

    PMD,Checkstyle和Sonar都是很有用的工具。但是,从一个组织的角度,我们需要追踪项目代码质量的变化和一段时间内的技术债务。我们需要能够对照其它类似的团队。

    为了能够做到这些,我们使用Sonar。本文假设您已经安装好了Sonar。

    对于这种情况,Altassian提供了相应的Sonar插件。为了使用它,我们需要添加必要的插件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    buildscript {
        repositories {
            mavenCentral()
            maven { url "http://mvnrepo.nordstrom.net/nexus/content/groups/public" }
            maven { url "http://repo.maven.apache.org/maven2" }
        }
        dependencies {
            classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:1.2"
        }
     
    }

    构建脚本安装完毕,我们队sonarqube进行配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    apply plugin: "org.sonarqube"
     
    sonarqube{
        check
        properties {
            // Sonar Specific properties
            property 'sonar.projectName''Project Services' // This is the display project name
            property 'sonar.host.url','http://sonar:8080/' // This is the Sonar Server
            property 'sonar.projectKey''com.wordpress.mrvivekr:project' // The Key using which the project details are tracked
     
           // JDBC Properties
            property 'sonar.jdbc.url','jdbc:jtds:sqlserver://ABCD:1433/SonarDB;domain=MYCOMP;SelectMethod=Cursor'
     
            property 'sonar.jdbc.username','userName'
            property 'sonar.jdbc.password','Secr#%'
     
          //Which Sonar Profile to use - this is optional
            property 'sonar.profile','JavaProfile'
        }
    }

    注意:sonar.profile是预配置sonar配置(和规则),应由您的公司预先配置完成。但这是可选而非必须。我的JDBC连接使用SQLServer连接。

    1
    ./gradlew sonarqube
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    :compileJava UP-TO-DATE
    :processResources UP-TO-DATE
    :classes UP-TO-DATE
    :compileTestJava
    :processTestResources
    :testClasses
    :test
    ....... ommitted .....
    11:27:36.713 INFO  - Java Main Files AST scan done: 812 ms
    11:27:36.714 INFO  - 13/13 source files have been analyzed
    11:27:36.715 INFO  - Java bytecode scan...
    11:27:36.762 INFO  - Java bytecode scan done: 47 ms
    11:27:36.762 INFO  - Java Test Files AST scan...
    11:27:36.762 INFO  - 5 source files to be analyzed
    11:27:36.885 INFO  - Java Test Files AST scan done: 123 ms
    11:27:36.885 INFO  - 5/5 source files have been analyzed
    11:27:36.888 INFO  - Package design analysis...
    11:27:39.868 INFO  - Package design analysis done: 2980 ms
    11:27:39.884 INFO  - Sensor JavaSquidSensor (done) | time=4307ms
    11:27:39.884 INFO  - Sensor Lines Sensor
    11:27:39.888 INFO  - Sensor Lines Sensor (done) | time=4ms
    11:27:39.888 INFO  - Sensor QProfileSensor
    11:27:39.891 INFO  - Sensor QProfileSensor (done) | time=3ms
    11:27:39.891 INFO  - Sensor InitialOpenIssuesSensor
    11:27:45.592 INFO  - Sensor InitialOpenIssuesSensor (done) | time=5701ms
    11:27:45.592 INFO  - Sensor ProjectLinksSensor
    11:27:45.730 INFO  - Sensor ProjectLinksSensor (done) | time=138ms
    11:27:45.730 INFO  - Sensor VersionEventsSensor
    11:27:47.690 INFO  - Sensor VersionEventsSensor (done) | time=1960ms
    11:27:47.690 INFO  - Sensor org.sonar.plugins.findbugs.FindbugsSensor@7894f007
    11:27:47.694 INFO  - Execute Findbugs 3.0.1...
    11:27:48.557 INFO  - Found findbugs plugin: /myprojects/build/sonar/findbugs/fb-contrib.jar
    11:27:48.596 INFO  - Found findbugs plugin: /myprojects/build/sonar/findbugs/findsecbugs-plugin.jar
    11:27:48.612 INFO  - Findbugs output report: /myprojects/build/sonar/findbugs-result.xml
    The following classes needed for analysis were missing:
      javax.crypto.spec.SecretKeySpec
    11:27:50.846 INFO  - Execute Findbugs 3.0.1 done: 3153 ms
    11:29:31.499 INFO  - Sensor org.sonar.plugins.findbugs.FindbugsSensor@7894f007 (done) | time=103809ms
    11:29:31.499 INFO  - Sensor SurefireSensor
    11:29:31.500 INFO  - parsing /myprojects/build/test-results
    11:29:31.558 INFO  - Sensor SurefireSensor (done) | time=59ms
    11:29:31.558 INFO  - Sensor JaCoCoOverallSensor
    11:29:31.565 WARN  - You are not using the latest JaCoCo binary format version, please consider upgrading to latest JaCoCo version.
    11:29:31.565 INFO  - Analysing /myprojects/build/jacoco/test.exec
    11:29:31.601 WARN  - You are not using the latest JaCoCo binary format version, please consider upgrading to latest JaCoCo version.
    ......... Ommitted .............
    11:30:38.654 INFO  - ANALYSIS SUCCESSFUL, you can browse http://sonar:8080/dashboard/index/com.wordpress.mrvivekr:project
    11:30:38.654 INFO  - Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report.
    11:30:38.655 INFO  - Executing post-job class org.sonar.plugins.buildbreaker.AlertBreaker
    11:30:38.657 INFO  - Executing post-job class org.sonar.plugins.buildbreaker.ForbiddenConfigurationBreaker
     
    BUILD SUCCESSFUL
     
    Total time: 5 mins 16.499 secs

    您应该看到类似的输出:

    Image title

    享受代码分析吧!

    http://www.oschina.net/translate/code-analysis-with-gradle

    https://dzone.com/articles/code-analysis-with-gradle

  • 相关阅读:
    [Angular2 Form] Build Select Dropdowns for Angular 2 Forms
    [Angular2 Form] Create Radio Buttons for Angular 2 Forms
    [Angular2 Router] Exiting an Angular 2 Route
    [Angular2 Router] Optional Route Query Parameters
    JS 实现地区,省份,城市,县区4级联动
    Linux web工程部署远程必备软件安装
    [置顶] 白话01背包
    APUE读书笔记-第17章-高级进程间通信
    UVA 10779 Collectors Problem(最大流)
    (二) win8+XAML Binding(数据绑定)
  • 原文地址:https://www.cnblogs.com/softidea/p/5246634.html
Copyright © 2011-2022 走看看