注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风之云的足迹

点击这里添加博客描述

 
 
 

日志

 
 

CheckStyle使用介绍  

2013-02-28 16:49:13|  分类: 软件管理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

为了更好的保障产品的质量,和对代码的质量进行相应的度量,我们需要制定一些自己的编码规范,也需要进行Review工作,但是一些工作可以通过工具来代替,所以希望通过调研能够实现自动化进行静态代码检查,最终达到下面的一些目标:

1.  规范代码书写、提高可读性

2.  通过工具代替部分代码Review的工作、提高工作效率

3.  工具能够方便的和Jenkins持续集成整合

4.  提早发现潜在的Bug

5.  保证代码的整体质量,提高开发者水平

 

Eclipse中使用checkstyle

  插件安装

1、 通过Eclispe中自动安装

EclipseàHelp->Instasll New Software 中输入下面的URL。进行安装

http://eclipse-cs.sourceforge.net/update  

2、 下载安装包手工安装

可以从下面的网址下载eclispecheckstyle安装包,手工方式来安装插件,具体Eclipse的插件安装方法可以自行网上搜索。

http://sourceforge.net/projects/eclipse-cs/

  插件使用

  1、安装完插件后,在Eclipse的下面路径能找到配置选项

  Windows-->Preferences-->Checkstyle

  CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
  

 

   通过界面我们可以发现Checkstyle插件中默认内置有2个执行代码检查的配置文件Sun ChecksSun Checks(Eclipse)。但是这两个文件检查的非常详细,一般的项目检查出来都会有非常多的错误警告信息,所以需要导入我们自己编写的配置文件。

 

 2、 自定义配置文件

点击上个界面中的New按钮,在弹出的页面中Type选择External Configuration File

      CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
    设置完成后,点击ok按钮,回到第一个页面后会出现配置的这个文件,选中这个文件,选择Set as Default 设置为默认的检查文件,如下图:
      CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
 

 

选中具体的配置文件后,点击confiure按钮,可以进入具体的配置规则页面,进行详细设置修改

 

3、 针对具体Eclipse使用checkstyle
   在Eclipse中选中你需要代码检查的项目,右键选择properties->checkstyle

   这里是针对具体的项目选择checkstyle,选中“Checkstyle active for this project”,

   同时在config中,选择我们配置的QACodeReview
 
     CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
 

 

配置完成后,点击ok按钮,会为当前项目重新build一次,build完成后如果一些编码没有按照自定义的规则,会在代码中出现提示,鼠标移动到放大镜处会提示详细的错误信息。

     CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
 

 

 

Jenkins中使用checkstyle

下载checkstyle

1、 下载地址 http://sourceforge.net/projects/checkstyle/files/checkstyle/

2解压checkstyle

当前下载了5.6版本,解压生成checkstyle-5.6文件夹

checkstyle-5.6-all.jar  需要用到的jar

 

编写ant脚本

 

<?xml version="1.0"?> <project name="OrangeIOS" basedir="." default="checkstyle">     

 <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"          classpath="checkstyle-5.6-all.jar" />   

<target name="checkstyle"         

 description="Generates a report of code convention violations.">         

<mkdir dir="checkstyle" />  

//调用指定的xml解析规则文件    

 <checkstyle config="sun_checks.xml" failureProperty="checkstyle.failure"              failOnViolation="false">    

//生成结果xml文件到指定目录     

<formatter type="xml"                  tofile="checkstyle/checkstyle_report.xml" />      

<fileset dir="src" includes="**/*.java" />

</checkstyle>

//通过指定的xsl模版文件生成一份html的报告,如果使用Jenkins了可以不需要这个,jenkins有插件可以帮忙解析xml结果文件

<xslt in="checkstyle/checkstyle_report.xml" out="checkstyle/checkstyle_report.html"              style="checkstyle-author.xsl" />    

</target>

</project>

 

安装Jenkins插件

1、 Jenkins上搜索安装Checkstyle Plug-in 插件

2、 Jenkins上配置buildcheckout代码库

3、 编写脚本,从指定目录下获取checkstyle需要的相关文件

这里使用wget来获取相关checkstyle文件,可以实现不需要开发人员额外在代码中加入相关文件即可实现静态代码检查。

4、 调用执行ant脚本,生成xml结果文件

5、 配置checkstyle插件,指定生成的xml位置

Jenkins任务的Add Post-build action->Publish checkstyle analysis results

在出现的文本框中填写你在build文件中生成的xml文件放置路径

       CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
 

6、 Jenkins上查看生成的结果

使用checkstyle构建完成后,进入每一次的构建页面的左边都能看到有一个Checkstyle Warnings的图标,点击能够看到详细的信息

            CheckStyle使用介绍 - 孔庆云kevin - 风之云的足迹
 


 

检查规则

checkstyle提供了很多的编码规则,但是有些并不适合每个团队,所以我们需要从中提炼出部分规则用于我们的项目中,这里只列举了我们使用的部分规则。

<?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">

 

      <!-- Checks that property files contain the same keys. -->

      <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->

      <module name="Translation">

             <property name="severity" value="warning" />

      </module>

      <module name="FileLength">

             <property name="max" value="1500" />

      </module>

      <module name="TreeWalker">

       

                      <!-- Checks for common coding problems               -->

                      <!-- See http://checkstyle.sf.net/config_coding.html -->

                      <module name="EqualsAvoidNull"/><!-- 避免存在null指针,比如 nullString.equals("My_Sweet_String"); -->

                      <module name="EmptyStatement"/><!-- 检查空语句,只有冒号 -->

                      <module name="RedundantThrows"/><!-- 检查代码中重复throw异常 -->

                      <module name="SimplifyBooleanReturn"/><!-- boolean类型的返回值编写复杂的可以修改为简单的 -->

                      <module name="StringLiteralEquality"/><!-- 字符串比较不要用==需要用equlas -->

                      <module name="IllegalCatch"/><!-- catch的时候不要直接Exception全部捕获,会导致遗漏一些内存泄露等的问题需要按具体Exception类型进行 -->

                      <module name="PackageDeclaration"/><!-- 类需要有包名,否则以后其它地方引用会导入不进来 -->

                      <module name="JUnitTestCase"/><!-- 检查setup,teardown方法拼写、返回值等是否正确 -->

                      <module name="UnnecessaryParentheses"/><!-- 检查是否使用了不需要的括号 -->     

                            

      </module>

</module>

 

 

碰到问题

再通过Ant编译生成checkstyle的解析规则的时候某些类的解析结果出现了以下的一些异常信息
Got an exception - unexpected char: '\'
Got an exception - Unexpected character 0xfffd in identifier

这些异常信息出现后导致了按照解析规则解析的结果没有正确展示出来,经过排查,后面发现原因是由于项目中使用了UTF-8编码,但是解析规则文件中没有指定编码.

解决方法是在解析规则文件中增加设置,在Checker的模块中增加charset的设置
<module name="Checker">
    <property name="severity" value="error"/>
    <property name="charset" value="UTF-8"/>
</module>

 



  评论这张
 
阅读(2127)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018