• Android学习系列(24)App代码规范之使用CheckStyle


    最近经常思考团队开发的一些东西,其中代码风格不统一是最常见的问题之一。按理说,大家协商和沟通一下,风格统一一下就可以了,其实不然,因为这是个个性张扬的时代!
    工作code review中用了CheckStyle小半年了,觉得很好很强大很方便,大家写出来的代码就像一个人写出来的一样,值此辞旧迎新,特简做说明,与尔同飨。

    1.简介
    官方网站:http://checkstyle.sourceforge.net/
    CheckStyle提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。
    CheckStyle检验的主要内容
    (1). Javadoc注释
    (2). 命名约定
    (3). 标题
    (4). Import语句
    (5). 体积大小
    (6). 空白
    (7). 修饰符
    (8). 块
    (9). 代码问题
    (10). 类设计
    (11). 混合检查(包活一些有用的比如非必须的System.out和printstackTrace)

    2.定制
    官方提供的代码规范往往太过严格,在工作中使用不太现实,所以有必要根据具体情况来定制具体的代码规范,CheckStyle对代码规范的定制提供了很多大灵活性。
    下面我们来定义一些基本的规范,后续有增加我们再修改。
    (1). 不要tab键;
    (2). 避免重复的import, 多余的import和import *
    (3). 常量全部大写字母(static final);
    (4). 成员变量以m开头;
    (5). 当有多重修饰符时,修饰符采用以下顺序:(public,protected,private,abstract,static,final,transient,volatile,synchronized,native,strictfp)
     ... ...
    其他的我们后面慢慢的修改。 

    3.配置文件
    在运行checkstyle时,需要一个参数(注:我的ubuntu服务器上安装的checkstyle5.4版本,最新的是5.5版本):


    这个配置文件就是用来定义你自己定制的代码规范,你可以参考官方说明:http://checkstyle.sourceforge.net/availablechecks.html
    这里,我们根据上面说的,来写这样一个code_check.xml :

    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
    <?xml version="1.0"?>
    <!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
     
    <module name="Checker">
     
        <!-- 检查文件是否以一个新行结束-->
        <module name="NewlineAtEndOfFile"/>
         
        <!-- 检查文件中是否含有tab键-->
        <module name="FileTabCharacter"/>
             
        <module name="TreeWalker">
     
            <!-- 常量全部用大写-->
            <module name="ConstantName"/>
     
            <!-- 避免.*,重复多余的和不使用的import-->
            <module name="AvoidStarImport"/>
            <module name="RedundantImport"/>
            <module name="UnusedImports"/>
             
            <!-- 成员变量格式为:m+大写+字母-->
            <module name="MemberName">
                <property name="format" value="^m[A-Z][a-zA-Z0-9]*$"/>
            </module>
     
            <!-- 检查代码块:起始大括号和if等同行,不能有空的代码块,结束大括号另起一行-->
            <module name="LeftCurly"/>
            <module name="NeedBraces"/>
            <module name="RightCurly"/>
            <!-- 当有多重修饰符时,修饰符采用以下顺序:
                 (public,protected,private,abstract,static,final,
                 transient,volatile,synchronized,native,strictfp) -->
            <module name="ModifierOrder"/>
        </module>
     
    </module>

    更多检查规范中文说明参考园子里地址: http://www.cnblogs.com/liugang/archive/2010/10/26/1860903.html

    4.使用checkstyle
    插件工具的使用我就不介绍了,我只想起个抛砖引玉的作用,checkstyle命令非常简单,这里我只说明3个参数:-c, -r, -o。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /*******************
     ***CheckStyle Usage**
     ******************/
    /***
     *参数
     *1. -c  配置文件,并验证文件
     *2. -o 输出结果
     *3. -r  遍历目录
     **/
     
    //用我们定制的code_checks.xml检查文件
    $>checkstyle -c ~/GitProj/world/code_checks.xml
      ~/GitProj/world/floworld/src/com/tianxia/app/floworld/appreciate/AppreciateLatestActivity.java
     
    //用我们定制的code_checks.xml检查目录下的所有源文件,并把结果输出到result.txt中
    $>checkstyle -c ~/GitProj/world/code_checks.xml 
      -r ~/GitProj/world/floworld/src/com/tianxia/app/floworld/appreciate/

    我们打开result.txt来看下输出结果:

    又是tab又是命名不规范,非常的准确。

    5.与Git挂钩
    快12点了,我先把文章发表出来,这部分随后我再补写。

  • 相关阅读:
    CocoaPods安装使用及配置私有库及注意点
    CocoaPods 错误 target overrides the `OTHER_LDFLAGS`...
    如何判断ios设备中是否安装了某款应用
    symbol(s) not found for architecture arm64
    所有iOS设备的屏幕分辨率
    iOS禁止多点操作(按钮和Table项)
    计算日期时间间隔:
    "library not found for
    Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
    oracle游标(转载)
  • 原文地址:https://www.cnblogs.com/mingliangzhai/p/3042237.html
Copyright © 2020-2023  润新知