CheckStyle使用总结(2)

CheckStyle的最佳实践

  一、 Sun’s Code Conventions的修改

  在CheckStyle的最新发布版本中,有一个对于Sun的Java编码规范的配置文件信息。但是,其中有很多条目并不一定符合项目开发的需要。就算是对于很多优秀的开源项目,按照这个规范来进行检查,也会出现成千上万的错误。

  下面提出的一些修改意见,是从实际项目执行过程中总结出来的,可以作为大家的参考。我们以CheckStyle3.0配置文件的顺序来介绍:

  1. 去除对于每个包都有一个package.html文件的限制;

<!--<module name="PackageHtml"/>-->
  
  2. 修改对于JavaDoc Comments的限定:对于很多使用Code Generator的项目来说,需要将手写代码与生成代码、单元测试代码的检查分开进行;

   3. 修改对于体积大小的限制:目前,很多显示器都是17寸,而且打印方面的限制也比以前有所改善,同时,由于代码中Factory等模式的运用,以及有意义的 方法名称等约定,默认每行代码的长度(80)是远远不能满足要求;对于方法长度等等,也应该根据项目情况自行决定:

<module name="FileLength"/>
<module name="LineLength">
<property name="max" value="120"/>
</module>
<module name="MethodLength">
<property name="max" value="300"/>
</module>
<module name="ParameterNumber"/>

  4. 修改对于Throws的的限制:允许Throws Unchecked Exception以及Throws Subclass Of Another Declared Exception。

<module name="RedundantThrows">
<property name="allowUnchecked" value="true"/>
<property name="allowSubclasses" value="true"/>
</module>

  5. 修改成员变量的可视性:一般情况下,应该允许Protected Members以及Package Visible Members。

<module name="VisibilityModifier">
<property name="protectedAllowed" value="true"/>
<property name="packageAllowed" value="true"/>
</module>

  二、 CheckStyle应用的最佳实践

  采用CheckStyle以后,编码规范的检查就变得及其简单,可以作为一项切实可行的实践加以执行。

  一般情况下,在项目小组中引入CheckStyle可以按照下面的步骤进行:

  1. 强调Code Review与Code Conventions的重要作用;

  2. 介绍CheckStyle;

  3. 初步应用CheckStyle:参照CheckStyle附带的配置文件,酌情加以剪裁,在项目的Ant配置文件中,添加CheckStyle任务,可以单独执行;

  4. 修改、定型CheckStyle的配置文件:按照基本配置文件执行一段时间(2~3周),听取开发人员的反馈意见,修改配置信息;

       5. 作为开发过程的日常实践,强制执行CheckStyle:稳定CheckStyle的配置信息,同时将CheckStyle任务作为Build的依赖任务 或者配置源码控制系统(目前,CheckStyle可以与CVS有效集成),使得代码在加入系统之前必须通过检查。

  同时需要指出的是,CheckStyle的有效执行需要依赖两个条件:

  ·Ant的广泛应用:CheckStyle基于Ant执行的方式比较容易,而且可以在项目内容形成一致的执行环境。同时,也比较容易与其它任务,例如Build等发生关联。

        示例:

        1. 到checkstyle主页下载checkstyle的安装包
        2. 解压之后我们会看到很多文件

        sun_checks.xml是sun公司的代码规范(我们暂时可以利用sun公司的代码规范检查自己的代码,当然我们也可以针对各个公司的不同标准进行定制),我们还能在contrib目录下看到好多的xsl文件,选择一个就好了,这些文件是为了正确显示检查后的结果用的. 它们规定了怎么去显示检查结果, 样式表.我选择的是/contrib/checkstyle-frames.xsl 这个文件,把它重命名为checkstyle.xsl, 然后所以我们得到了四个文件

  • checkstyle-5.0-beta01.jar
  • checkstyle-all-5.0-beta01.jar
  • sun_checks.xml
  • /contrib/checkstyle-frames.xsl
        我们还是选取Cruisecontrol自带的项目conneectfour.当然你也可以选择其它的项目.

        3 . 我们把上边提到的两个jar包放到项目的lib下面
            /lib/checkstyle-5.0-beta01.jar
            /lib/checkstyle-all-5.0-beta01.jar

        4 设置检查规范
        在connectfour根目录下建立一个docs的目录,然后把sun_checks.xml放进去 /docs/sun_checks.xml

        5 修改build.xml,加入checkstyle任务 我们打开这个项目的构建文件build.xml 加入一下代码
<property name="checkstyle.dir"
value="${basedir}\lib"/>
<path id="checkstyle.dir">
<fileset dir="${checkstyle.dir}">
<include name="*.jar"/>
</fileset>
</path>
<taskdef name="checkstyle" 
classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstyle.dir" />
<target name="checkstyle" depends="clean, update,compile,test"
description="Generates a report of code convention violations.">
<mkdir dir="target/check-results"/>
<checkstyle config="docs/sun_checks.xml"
failureProperty="checkstyle.failure"
failOnViolation="false">
<formatter type="xml" tofile="target/check-results/checkstyle_report.xml"/>
<fileset dir="src" includes="**/*.java"/>
</checkstyle>
<style in="target/check-results/checkstyle_report.xml" out="target/check-results/checkstyle_report.html" style="checkstyle.xsl"/>
</target>

        6 运行checkstyle 任务
        我们在这个项目的根目录下运行ant checkstyle,如果没有错误,证明checkstyle成功运行,这个时候会有一个checkstyle_report.html在target/check-results目录下产生.我们可以用浏览器打开这个html文件就会看到这次检查的结果.


   ·IDE Format Code的强大功能:由于CheckStyle本身并没有提供很强大的Code Format等功能,因此,需要借助IDE的帮助,从而使得在发生错误的时候,可以很容易的进行修复。目前,主流的Java IDE都提供了这方面的功能,IDEA在这方面尤其突出。它提供的统一、可定义的Code Format Template(项目小组内部可以使用统一模板)以及方便的快捷键功能(Ctrl+Alt+T:Format Code, Ctrl+Alt+O:Optimize Import等)。


    参考资料:

http://www.cnblogs.com/bluesky4485/archive/2011/11/30/2269198.html

http://gsdhaiji-cai.iteye.com/blog/1535755

http://www.oschina.net/p/checkstyle/

http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html

http://www.blogjava.net/ashutc/archive/2011/06/03/351690.html

你可能感兴趣的:(CheckStyle使用总结(2))