文档章节

CheckStyle的安装及使用

电脑小童
 电脑小童
发布于 2015/08/12 13:54
字数 2451
阅读 8104
收藏 1

CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。

下载地址:http://sourceforge.net/projects/eclipse-cs/

以下是详细的安装步骤

1在官网下载最新版本

打开以上的下载地址,进入下载页面,点击“download”开始插件的下载

wps2B13.tmp

以下为解压文件目录:(主要文件为:features、plugins)

wps2B23.tmp

2采用link方式安装eclipse插件

选择eclipse图标,右键选择“打开文件位置”,打开eclipse的安装目录。

wps2B34.tmp

在该目录下新建文件夹“myplu”,将刚才压缩包中的features、plugins拷贝到myplu目录。

打开eclipse主目录下的dropins文件夹,新建checkstyle.link文件。(扩展名为.link),使用记事本打开该文件,填写刚才的myplu路径,如:path=D://soft//Install//eclipse//myplu

wps2B35.tmp

3验证安装是否成功

重新启动eclipse,选择“window”--“preferences”,查看是否存在Checkstyle选择,若存在说明安装成功。如图

wps2B45.tmp

4配置Checksytel

选择“window”--“preferences”--“Checkstyle”,点击左侧的New按钮,出现添加新配置选项。

wps2B56.tmp

在Type中选择:External configuration file

Name:自己根据自己实际需求自定义名称

Location:选择Checksytel的配置文件(该配置文件中定义了相关的style规则)

完成配置后将添加的配置选为默认配置,如图


5Checkstyle使用

在工程上点击右键,选择“Checkstyle”选项,如图

wps2B67.tmp

常用的选项为“Activate Checkstyle”、“Check Code with Checkstyle”、“Clear Checkstyle violations”

其中“Activate Checkstyle”为激活CheckStyle功能,在你编码中会自动提示代码的规范问题。(经测试一般是需要保存代码后才会有提示)

“Check Code with Checkstyle”表示代码编写完成后,统一验证代码相关规范问题。

“Clear Checkstyle violations”为清楚相关的checkstyle提示信息

如图为相关提示信息

wps2B87.tmp

附:checkstyle.xml(来源于网络)

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">  
  
<!-- Generated by RHY @will_awoke -->  
  
<module name="Checker">     
      
    <property name="charset" value="UTF-8"/>     
    <property name="severity" value="warning"/>  
      
    <!-- Checks for Size Violations.  -->   
    <!-- 检查文件的长度(行) default max=2000 -->   
    <module name="FileLength">           
     <property name="max" value="2500"/>          
  </module>    
    
  <!-- Checks that property files contain the same keys. -->   
  <!-- 检查**.properties配置文件 是否有相同的key  
  <module name="Translation">           
  </module>     
  -->   
      
  <module name="TreeWalker">  
      
    <!-- Checks for imports    -->                 
    <!-- 必须导入类的完整路径,即不能使用*导入所需的类 -->    
    <module name="AvoidStarImport"/>    
      
    <!-- 检查是否从非法的包中导入了类 illegalPkgs: 定义非法的包名称-->    
    <module name="IllegalImport"/> <!-- defaults to sun.* packages -->    
      
    <!-- 检查是否导入了不必显示导入的类-->    
    <module name="RedundantImport"/>    
      
    <!-- 检查是否导入的包没有使用-->    
    <module name="UnusedImports"/>  
      
    <!-- Checks for whitespace             
    <module name="EmptyForIteratorPad"/>  
    <module name="MethodParamPad"/>  
    <module name="NoWhitespaceAfter"/>  
    <module name="NoWhitespaceBefore"/>  
    <module name="OperatorWrap"/>  
    <module name="ParenPad"/>  
    <module name="TypecastParenPad"/>  
    <module name="WhitespaceAfter"/>  
    <module name="WhitespaceAround"/>  
    -->  
      
    <!-- 检查类和接口的javadoc 默认不检查author 和version tags         
      authorFormat: 检查author标签的格式  
            versionFormat: 检查version标签的格式  
            scope: 可以检查的类的范围,例如:public只能检查public修饰的类,private可以检查所有的类  
            excludeScope: 不能检查的类的范围,例如:public,public的类将不被检查,但访问权限小于public的类仍然会检查,其他的权限以此类推  
            tokens: 该属性适用的类型,例如:CLASS_DEF,INTERFACE_DEF -->  
    <module name="JavadocType">    
        <property name="authorFormat" value="\S"/>    
      <property name="scope" value="protected"/>          
      <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>    
    </module>  
      
    <!-- 检查方法的javadoc的注释  
            scope: 可以检查的方法的范围,例如:public只能检查public修饰的方法,private可以检查所有的方法  
            allowMissingParamTags: 是否忽略对参数注释的检查  
            allowMissingThrowsTags: 是否忽略对throws注释的检查  
            allowMissingReturnTag: 是否忽略对return注释的检查 -->  
    <module name="JavadocMethod">    
        <property name="scope" value="private"/>    
      <property name="allowMissingParamTags" value="false"/>    
      <property name="allowMissingThrowsTags" value="false"/>    
      <property name="allowMissingReturnTag" value="false"/>    
      <property name="tokens" value="METHOD_DEF"/>    
      <property name="allowUndeclaredRTE" value="true"/>    
      <property name="allowThrowsTagsForSubclasses" value="true"/>    
      <!--允许get set 方法没有注释-->  
        <property name="allowMissingPropertyJavadoc" value="true"/>  
    </module>    
          
    <!-- 检查类变量的注释  
            scope: 检查变量的范围,例如:public只能检查public修饰的变量,private可以检查所有的变量 -->      
    <module name="JavadocVariable">    
      <property name="scope" value="private"/>    
    </module>    
          
    <!--option: 定义左大括号'{'显示位置,eol在同一行显示,nl在下一行显示    
      maxLineLength: 大括号'{'所在行行最多容纳的字符数    
      tokens: 该属性适用的类型,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF -->    
    <module name="LeftCurly">   
        <property name="option" value="nl"/>  
    </module>  
       
    <!-- NeedBraces 检查是否应该使用括号的地方没有加括号    
      tokens: 定义检查的类型 -->    
    <module name="NeedBraces"/>    
      
    <!-- Checks the placement of right curly braces ('}') for  else, try, and catch tokens. The policy to verify is specified using property  option.     
      option: 右大括号是否单独一行显示    
      tokens: 定义检查的类型  -->    
    <module name="RightCurly">      
        <property name="option" value="alone"/>     
    </module>  
          
    <!-- 检查在重写了equals方法后是否重写了hashCode方法 -->   
    <module name="EqualsHashCode"/>  
          
    <!--  Checks for illegal instantiations where a factory method is preferred.    
      Rationale: Depending on the project, for some classes it might be preferable to create instances through factory methods rather than calling the constructor.    
      A simple example is the java.lang.Boolean class. In order to save memory and CPU cycles, it is preferable to use the predefined constants TRUE and FALSE. Constructor invocations should be replaced by calls to Boolean.valueOf().    
      Some extremely performance sensitive projects may require the use of factory methods for other classes as well, to enforce the usage of number caches or object pools. -->    
    <module name="IllegalInstantiation">    
        <property name="classes" value="java.lang.Boolean"/>    
    </module>  
      
    <!-- Checks for Naming Conventions.   命名规范   -->  
    <!-- local, final variables, including catch parameters -->  
    <module name="LocalFinalVariableName"/>  
      
    <!-- local, non-final variables, including catch parameters-->   
    <module name="LocalVariableName"/>  
      
    <!-- static, non-final fields -->  
    <module name="StaticVariableName">  
        <property name="format" value="(^[A-Z0-9_]{0,19}$)"/>      
    </module>    
      
    <!-- packages -->  
    <module name="PackageName" >  
        <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>  
    </module>   
       
    <!-- classes and interfaces -->  
    <module name="TypeName">    
        <property name="format" value="(^[A-Z][a-zA-Z0-9]{0,19}$)"/>    
    </module>  
      
    <!-- methods -->    
    <module name="MethodName">            
      <property name="format" value="(^[a-z][a-zA-Z0-9]{0,19}$)"/>           
    </module>   
      
    <!-- non-static fields -->  
    <module name="MemberName">    
        <property name="format" value="(^[a-z][a-z0-9][a-zA-Z0-9]{0,19}$)"/>           
    </module>  
      
    <!-- parameters -->  
    <module name="ParameterName">  
        <property name="format" value="(^[a-z][a-zA-Z0-9_]{0,19}$)"/>           
    </module>  
      
    <!-- constants (static,  final fields) -->  
    <module name="ConstantName">   
        <property name="format" value="(^[A-Z0-9_]{0,19}$)"/>        
    </module>  
      
    <!-- 代码缩进   -->  
    <module name="Indentation">          
    </module>  
      
    <!-- Checks for redundant exceptions declared in throws clause such as duplicates, unchecked exceptions or subclasses of another declared exception.   
      检查是否抛出了多余的异常    
    <module name="RedundantThrows">  
        <property name="logLoadErrors" value="true"/>  
        <property name="suppressLoadErrors" value="true"/>   
    </module>  
    -->   
      
     <!--  Checks for overly complicated boolean expressions. Currently finds code like  if (b == true), b || true, !false, etc.     
       检查boolean值是否冗余的地方    
       Rationale: Complex boolean logic makes code hard to understand and maintain. -->    
    <module name="SimplifyBooleanExpression"/>  
      
    <!--  Checks for overly complicated boolean return statements. For example the following code    
       检查是否存在过度复杂的boolean返回值    
       if (valid())    
          return false;    
       else    
          return true;    
       could be written as    
          return !valid();    
       The Idea for this Check has been shamelessly stolen from the equivalent PMD rule. -->    
    <module name="SimplifyBooleanReturn"/>    
      
    <!-- Checks that a class which has only private constructors is declared as final.只有私有构造器的类必须声明为final-->    
    <module name="FinalClass"/>  
      
     <!--  Make sure that utility classes (classes that contain only static methods or fields in their API) do not have a public constructor.    
       确保Utils类(只提供static方法和属性的类)没有public构造器。    
       Rationale: Instantiating utility classes does not make sense. Hence the constructors should either be private or (if you want to allow subclassing) protected. A common mistake is forgetting to hide the default constructor.    
       If you make the constructor protected you may want to consider the following constructor implementation technique to disallow instantiating subclasses:    
       public class StringUtils // not final to allow subclassing    
       {    
           protected StringUtils() {    
               throw new UnsupportedOperationException(); // prevents calls from subclass    
           }    
           public static int count(char c, String s) {    
               // ...    
           }    
       }   
    <module name="HideUtilityClassConstructor"/>   
    -->   
      
    <!--  Checks visibility of class members. Only static final members may be public; other class members must be private unless property protectedAllowed or packageAllowed is set.    
      检查class成员属性可见性。只有static final 修饰的成员是可以public的。其他的成员属性必需是private的,除非属性protectedAllowed或者packageAllowed设置了true.    
       Public members are not flagged if the name matches the public member regular expression (contains "^serialVersionUID$" by default). Note: Checkstyle 2 used to include "^f[A-Z][a-zA-Z0-9]*$" in the default pattern to allow CMP for EJB 1.1 with the default settings. With EJB 2.0 it is not longer necessary to have public access for persistent fields, hence the default has been changed.    
       Rationale: Enforce encapsulation. 强制封装 -->    
    <module name="VisibilityModifier"/>   
      
    <!-- 每一行只能定义一个变量 -->  
    <module name="MultipleVariableDeclarations">         
    </module>  
      
     <!-- Checks the style of array type definitions. Some like Java-style: public static void main(String[] args) and some like C-style: public static void main(String args[])     
       检查再定义数组时,采用java风格还是c风格,例如:int[] num是java风格,int num[]是c风格。默认是java风格-->    
    <module name="ArrayTypeStyle">   
    </module>  
      
    <!-- Checks that there are no "magic numbers", where a magic number is a numeric literal that is not defined as a constant. By default, -1, 0, 1, and 2 are not considered to be magic numbers.   
    <module name="MagicNumber">     
    </module>  
    -->    
      
    <!-- A check for TODO: comments. Actually it is a generic regular expression matcher on Java comments. To check for other patterns in Java comments, set property format.     
       检查是否存在TODO(待处理) TODO是javaIDE自动生成的。一般代码写完后要去掉。    
     -->    
    <module name="TodoComment"/>    
      
    <!--  Checks that long constants are defined with an upper ell. That is ' L' and not 'l'. This is in accordance to the Java Language Specification,  Section 3.10.1.    
      检查是否在long类型是否定义了大写的L.字母小写l和数字1(一)很相似。    
      looks a lot like 1. -->    
    <module name="UpperEll"/>  
      
    <!--  Checks that switch statement has "default" clause. 检查switch语句是否有‘default’从句    
       Rationale: It's usually a good idea to introduce a default case in every switch statement.   
       Even if the developer is sure that all currently possible cases are covered, this should be expressed in the default branch,  
        e.g. by using an assertion. This way the code is protected aginst later changes, e.g. introduction of new types in an enumeration type. -->   
    <module name="MissingSwitchDefault"/>   
      
    <!--检查switch中case后是否加入了跳出语句,例如:return、break、throw、continue -->  
    <module name="FallThrough"/>    
      
    <!-- Checks the number of parameters of a method or constructor. max default 7个. -->      
    <module name="ParameterNumber">        
      <property name="max" value="5"/>                
    </module>  
      
    <!-- 每行字符数 -->      
    <module name="LineLength">    
      <property name="max" value="200"/>         
    </module>    
      
    <!-- Checks for long methods and constructors. max default 150行. max=300 设置长度300 -->   
    <module name="MethodLength">    
      <property name="max" value="300"/>                   
    </module>          
      
    <!-- ModifierOrder 检查修饰符的顺序,默认是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native -->    
    <module name="ModifierOrder">            
    </module>        
      
    <!-- 检查是否有多余的修饰符,例如:接口中的方法不必使用public、abstract修饰  -->  
    <module name="RedundantModifier">         
    </module>  
      
    <!--- 字符串比较必须使用 equals() -->     
    <module name="StringLiteralEquality">            
    </module>   
      
    <!-- if-else嵌套语句个数 最多4层 -->  
    <module name="NestedIfDepth">          
      <property name="max" value="3"/>           
    </module>    
      
    <!-- try-catch 嵌套语句个数 最多2层 -->  
    <module name="NestedTryDepth">    
      <property name="max" value="2"/>           
    </module>    
          
    <!-- 返回个数 -->     
    <module name="ReturnCount">          
      <property name="max" value="5"/>    
      <property name="format" value="^$"/>            
    </module>                    
    
  </module>  
    
</module>


© 著作权归作者所有

共有 人打赏支持
电脑小童
粉丝 5
博文 7
码字总数 5225
作品 0
青岛
程序员
私信 提问
安装checkstyle eclipse插件

安装checkstyle eclipse插件 输入框中,输入checkstyle,点击Go,选择 Checkstyle Plug-in 6.11.1 ,并安装 配置checkstyle Eclipse中,点击Window->Preferences 选择Checkstyle 点击New Typ......

binhu
2015/12/29
1K
0
eclipse使用link方式安装checkstyle

什么是checkstyle CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中...

STG0825
2013/04/18
0
5
Android studio checkstyle 使用

首先要安装CheckStyle-IDEA插件,官网:https://plugins.jetbrains.com/plugin/1065 打开Android studio进入设置->Plugins->搜索CheckStyle-IDEA,安装,重启Android studio。 然后配置check......

wei-spring
2016/09/07
0
0
玩转Eclipse — 自动代码规范检查工具Checkstyle

http://blog.csdn.net/jmyue/article/details/11110857 大项目都需要小组中的多人共同完成,但是每个人都有自己的编码习惯,甚至很多都是不正确的。那么如何使小组所有开发人员都遵循某些编码...

shzwork
04/08
0
0
Java代码规范、格式化和checkstyle检查配置文档

为便于规范各位开发人员代码、提高代码质量,研发中心需要启动代码评审机制。为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的...

凯文加内特
2016/03/16
360
0

没有更多内容

加载失败,请刷新页面

加载更多

腾讯面试:一条SQL语句执行得很慢的原因有哪些?

说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。 之前腾讯面试的实...

java菜分享
32分钟前
9
0
Java 基本功 之 CAS

本文首发于个人公众号《andyqian》, 期待你的关注! 前言 在Java并发编程中,我们经常使用锁对竞争资源予以并发控制,以解决资源竞争的问题。但无论是使用 Lock 还是 Synchronized,随着锁机...

andyqian
36分钟前
4
0
信号量与条件变量的区别

注意信号量与条件变量的区别 信号量内容可见:http://www.cnblogs.com/charlesblc/p/6142868.html 信号量、共享内存,以及消息队列等System V IPC三剑客主要关注进程间通信; 而条件变量、互...

shzwork
46分钟前
1
0
在VirtualBox 6.0中安装fedora 30

操作系统安装完毕后首先进行更新。 sudo dnf update 重启虚拟机后,安装VirtualBox依赖的软件包。 sudo dnf install kernel-headers kernel-devel dkms gcc 最后,安装“增强功能”。...

gugudu
55分钟前
1
0
861. Score After Flipping Matrix

为了获得最大值,我们必须保证每一行列下标小的1尽可能的多(最高位的1尽可能多)。 首先,考虑我们可以进行的操作有 翻转列,进行列操作 翻转行,进行行操作 通过行操作 我们总是可以使得第...

reter
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部