zoukankan      html  css  js  c++  java
  • 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 :

    <?xml version="1.0"?>
    <!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
        "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
    
    <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。

    /*******************
     ***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点了,我先把文章发表出来,这部分随后我再补写。

  • 相关阅读:
    vim 一些操作
    RedisTemplate 获取过期时间的问题
    SpringBoot 配置 Redis 多缓存名(不同缓存名缓存失效时间不同)
    Vue ElementUI Tree组件 回显问题(设置选择父级时会全选所有的子级,有此业务场景是不适合的)
    动态切换数据库源码解析
    @Primary 注解的作用
    @Value注解的使用
    Shiro&Jwt验证
    浏览器缓存和Service Worker
    Javascript的事件模型和Promise实现
  • 原文地址:https://www.cnblogs.com/qianxudetianxia/p/2309102.html
Copyright © 2011-2022 走看看