美文网首页程序员
基于Gradle使用阿里巴巴Java开发规约进行代码检查

基于Gradle使用阿里巴巴Java开发规约进行代码检查

作者: 家榆_77cd | 来源:发表于2017-10-19 14:58 被阅读0次

    阿里的开发规约插件是基于PMD进行的代码检测,而且已经有PMD的Gradle插件。

    参考gradle pmd插件的自定义规则的使用这文章后,剩下的问题就是如何把阿里制定的Rule也引进来。

    定制RuleSet

    新建文件 etc/pmd/ruleset.xml,其内容如下:

    <?xml version="1.0"?>
    <ruleset name="Custom ruleset"
        xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
      <description>
        自定义Rule set
      </description>
      <!-- 引入PMD制定的Rule, 来源于https://github.com/pmd/pmd/tree/master/pmd-java/src/main/resources/rulesets/java  -->
      <rule ref="rulesets/java/android.xml">
        <exclude name="CallSuperLast"/>
      </rule>
      <rule ref="rulesets/java/basic.xml">
        <exclude name="CollapsibleIfStatements"/>
      </rule>
      <rule ref="rulesets/java/clone.xml"/>
      <rule ref="rulesets/java/finalizers.xml"/>
      <rule ref="rulesets/java/imports.xml"/>
      <rule ref="rulesets/java/javabeans.xml"/>
    
      <rule ref="rulesets/java/optimizations.xml">
        <exclude name="LocalVariableCouldBeFinal"/>
        <exclude name="MethodArgumentCouldBeFinal"/>
      </rule>
      <rule ref="rulesets/java/sunsecure.xml"/>
    
      <rule ref="rulesets/java/unnecessary.xml">
        <exclude name="UselessParentheses"/>
      </rule>
    
      <!-- 引入阿里的Rule, 来源于 https://github.com/alibaba/p3c/tree/master/p3c-pmd/src/main/resources/rulesets/java -->
      <rule ref="rulesets/java/ali-comment.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-concurrent.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-constant.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-exception.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-flowcontrol.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-naming.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-oop.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-orm.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-other.xml">
      </rule>
      
      <rule ref="rulesets/java/ali-set.xml">
      </rule>
    
    </ruleset>
    

    从上面例子可以看出,非常方便定制rule。甚至还可以使用 exclude 标签排队不需要的rule。

    build.gradle

    apply plugin: 'java'
    apply plugin: 'pmd'
    
    ext {
      p3cPmdVersion = "1.3.0"
      pmdVersion = '5.5.2' # 与p3c-pmd 中使用pmd的版本一致
    }
    
    // PMD配置
    pmd {
      toolVersion = pmdVersion // 避免使用比较旧的版本,需要指定pmd的版本
      ignoreFailures = true
      ruleSetConfig = resources.text.fromFile("etc/pmd/ruleset.xml")
    }
    
    dependencies {
      pmd "com.alibaba.p3c:p3c-pmd:${p3cPmdVersion}"
    }
    

    通过上面例子可以看出,使用p3c-pmd,其实很简单,只需要把其一些rule 导到ruleSetConfig 文件中即可。

    执行检查

    PMD插件提供了如下几个任务

    任务名称 描述
    pmdMain 检查src/main/java下的代码
    pmdTest 检查src/main/test下的代码
    pmdSourceSet 检查给定范围的代码
    check 检查源码和单元测试代码

    执行下面命令:

    gradle check
    

    会将执行结果输出到 build/reports/pmd目录中的main.html、test.html等文件中。

    相关文章

      网友评论

        本文标题:基于Gradle使用阿里巴巴Java开发规约进行代码检查

        本文链接:https://www.haomeiwen.com/subject/yaiuuxtx.html