快速使用Checkstyle(一)

原创 2018年04月15日 12:39:24

快速使用Checkstyle(一)

1.介绍

Checkstyle是一种代码规约工具,可以帮助程序员编写符合编码标准的Java代码。使用

Checkstyle可以自定义一些代码规范用于在编译中强制执行。CheckStyle默认使用的是Sun的编码规范。本文以8.8版本进行编写。

参考资料:http://checkstyle.sourceforge.net/index.html

例如:

Sun:http://checkstyle.sourceforge.net/sun_style.html

Google:http://checkstyle.sourceforge.net/google_style.html

对应文件下载地址(Github):

https://github.com/checkstyle/checkstyle/tree/60f41e3c16e6c94b0bf8c2e5e4b4accf4ad394ab/src/main/resources

         我们可以在提供的文件基础上做修改,也可以自己创建新的文件完全自定义。

注意事项:

         CheckStyle7以后的版本需要JDK1.8编译要求。然而社区的成员已经创建了最新的Checkstyle版本的一个非官方的backport,以便可以在JDK1.6基础上运行,如果想在JDK1.8之前版本运行CheckStyle 7以后版本可以看看,具体的我就没去关注了。

         Checkstyle配置模块需要在checker根模块下。大部分模块是TreeWalker子模块。TreeWalker通过将每个Java源文件分别转换为抽象语法树,然后将结果交给每个子模块进行操作检查。例如典型的配置如下:

<module name="Checker">

   <module name="JavadocPackage"/>

   <module name="TreeWalker">

       <module name="AvoidStarImport"/>

       <module name="ConstantName"/>

       <module name="EmptyBlock"/>

   </module>

</module>

2.Checks

按照check名称首字母往下排列。

AbbreviationAsWordInName

描述:检查目标元素名称中连续大写字母长度,允许强制执行骆驼命名。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

allowedAbbreviationLength

允许连续大写字母数量。

Integer

3

5.8

allowedAbbreviations

自定义跳过检查缩写,多个已逗号分隔,不允许出现空格。

Set<String>

{}

5.8

ignoreFinal

忽略使用final修饰的内容。

Boolean

True

5.8

ignoreStatic

忽略使用static修饰的内容。

Boolean

True

5.8

ignoreOverriddenMethods

忽略使用@Override修饰的方法。

Boolean

True

5.8

tokens

指定tokens,具体的参照官网或者TokenTypes类。

TokenTypes

太多不写了。

5.8

例子:

<modulename="AbbreviationAsWordInName">

    <property name="tokens"value="VARIABLE_DEF,CLASS_DEF"/>

    <property name="ignoreStatic"value="false"/>

    <propertyname="allowedAbbreviationLength" value="1"/>

    <propertyname="allowedAbbreviations" value="XML,URL"/>

</module>

AbstractClassName

描述:验证抽象类名称。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

format

自定义格式

Regular Expression

"^Abstract.+$"

3.2

ignoreModifier

是否忽略匹配名称的类的抽象(abstract)修饰符检查。

Boolean

False

5.3

ignoreName

没啥用

Boolean

False

5.3

例子:

<modulename="AbstractClassName">

  <property name="ignoreModifier"value="true"/>

</module>

AnnotationLocation

描述:检查注解位置。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

allowSamelineMultipleAnnotations

允许多个注解与目标元素在同一行。

Boolean

False

6.0

allowSamelineSingleParameterlessAnnotation

允许单个参数或无参数的注解与目标元素位于同一行。

Boolean

True

6.1

allowSamelineParameterizedAnnotation

允许只有一个参数的注解与目标元素未与同一行。

Boolean

False

6.4

tokens

指定tokens,具体的参照官网或者TokenTypes类。

TokenTypes

太多不写

6.0

例子:

<modulename="AnnotationLocation">

    <property name="allowSamelineMultipleAnnotations"value="true"/>

    <propertyname="allowSamelineSingleParameterlessAnnotation"value="false"/>

    <propertyname="allowSamelineParameterizedAnnotation"value="false"/>

</module>

AnnotationOnSameLine

描述:检查确认注解与目标位于同一行,不建议使用。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

tokens

指定tokens,具体的参照官网或者TokenTypes类。

TokenTypes

太多了不写

8.2

例子:

<modulename="AnnotationOnSameLine"/>

AnnotationUseStyle

描述:检查使用注解的样式。这个感觉没啥用所以就没细看了。

父Module:TreeWalker

AnonInnerLength

描述:检查匿名内部类长度限制。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

max

限制长度

Integer

20

3.2

例子:

<modulename="AnonInnerLength">

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

</module>

ArrayTrailingComma

描述:检查数组初始化尾部是否有逗号。这个感觉没啥用所以就不说了。

父Module:TreeWalker

ArrayTypeStyle

描述:检查数组定义样式。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

javaStyle

强制使用Java风格,false为C风格。

Boolean

true

3.1

例子:

<modulename="ArrayTypeStyle"/>

AtclauseOrder

描述:检查javadoc块标签或javadoc标签的顺序。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

violateExecutionOnNonTightHtml

不是太明白,默认即可。

Boolean

false

8.3

target

指定目标检查。

TokenTypes

CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF

6.0

tagOrder

定义注释Tag顺序。用逗号分隔。

Set<String>

@author, @version, @param, @return, @throws, @exception, @see, @since, @serial, @serialField, @serialData, @deprecated

6.0

例子:

<modulename="AtclauseOrder">

    <property name="tagOrder"value="@author, @version, @param,

    @return, @throws, @exception, @see, @since,@serial,

    @serialField, @serialData,@deprecated"/>

    <property name="target"value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,

    METHOD_DEF, CTOR_DEF,VARIABLE_DEF"/>

</module>

AvoidEscapedUnicodeCharacters

描述:检查使用Unicode

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

allowEscapesForControlCharacters

默认即可,google为true。

Boolean

False

5.8

allowByTailComment

如果转义字符同行有注释则允许。

Boolean

False

5.8

allowIfAllCharactersEscaped

如果字符串中所有的字符都被转义,则允许。

Boolean

False

5.8

allowNonPrintableEscapes

默认即可,google为true。

Boolean

False

5.8

例子:

<modulename="AvoidEscapedUnicodeCharacters"/>

AvoidInlineConditionals

描述:检查内联条件,基本不用。内联条件例如:

String a = getParameter("a");

String b = (a==null || a.length<1) ? null :a.substring(1);

父Module:TreeWalker

AvoidNestedBlocks

描述:检查嵌套块。基本不用。

父Module:TreeWalker

AvoidStarImport

描述:检查是否使用*的导入语句。理由:从一个包中导入所有的类或从一个类中导入静态成员会导致包或类之间的紧密耦合,当一个新版本的库引入名称冲突时可能会导致问题。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

excludes

排除对某些包检查,子包不会自动排除。

Set<String>

{}

3.2

allowClassImports

是否允许*进行导入包。

Boolean

False

5.3

allowStaticMemberImports

是否允许*进行静态导入包。

Boolean

False

5.3

例子:

<modulename="AvoidStarImport">

   <property name="excludes"value="java.io,java.net,java.lang.Math"/>

   <propertyname="allowClassImports" value="false"/>

   <propertyname="allowStaticMemberImports" value="false"/>

</module>

AvoidStaticImport

描述:检查是否有静态导入语句。基本不用。

父Module:TreeWalker

BooleanExpressionComplexity

描述:检查&&,||,&,|,^运算符在同一个表达式中使用次数。基本不用。

父Module:TreeWalker

CatchParameterName

描述:检查捕获参数(catch(Exception e))名称是否符合由format属性指定的格式。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

format

指定格式。

Regular Expression

"^(e|t|ex|[a-z][a-z][a-zA-Z]+)$"

6.14

例子:

<modulename="CatchParameterName">

    <property name="format"value="^[a-z][a-zA-Z0-9]+$"/>

</module>

ClassDataAbstractionCoupling

描述:检查类中其他类实例化数量。基本不用。

父Module:TreeWalker

ClassFanOutComplexity

描述:检查一个给定的类所依赖的其他类的数量。基本不用。

父Module:TreeWalker

ClassTypeParameterName

描述:检查类类型参数的标识符命名规则。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

format

指定格式标识符。

Regular Expression

"^[A-Z]$"

5.0

例子:

<modulename="ClassTypeParameterName"/>

CommentsIndentation

描述:检查注释和代码之间的缩进。

父Module:TreeWalker

属性:无

ConstantName

描述:检查常量的标识符。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

format

指定格式标识符

Regular Expression

"^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"

3.0

applyToPublic

是否应用于public

Boolean

True

5.0

applyToProtected

是否应用于protected

Boolean

True

5.0

applyToPackage

是否应用于package

Boolean

True

5.0

applyToPrivate

是否应用于private

Boolean

True

5.0

例子:

<modulename="ConstantName">

    <property name="format"

              value="^log(ger)?|[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>

</module>

CovariantEquals

描述:检查是否equals的重载,如果有必须明确指定Object类型。基本上不用。

父Module:TreeWalker

CustomImportOrder

描述:检查导入声明按用户指定的顺序出现。如果有一个导入,没有在配置中指定,那么导入应该放置在导入列表的末尾。个人感觉没太大用,就不说了。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

参照官网

参照官网

 

 

 

例子:

<modulename="CustomImportOrder">

    <propertyname="customImportOrderRules"

       value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS"/>

    <propertyname="specialImportsRegExp" value="^org\."/>

    <property name="sortImportsInGroupAlphabetically"value="true"/>

    <propertyname="separateLineBetweenGroups" value="true"/>

</module>

CyclomaticComplexity

描述:检查switch,while等复杂度,根据指定的检查。基本上不用。

父Module:TreeWalker

DeclarationOrder

描述:检查是否根据Java语言的代码约定,类或接口声明部分按照指定顺序出现。

1. 类(静态)变量。首先是public类变量,然后是protected,然后是package level(没有修饰符)最后是private。

2. 实例变量。首先是public类的变量,然后是protected,然后是package level(没有修饰符)最后是private。

3. 构造方法。

4. 方法。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

ignoreConstructors

是否忽略构造函数。

Boolean

False

5.2

ignoreModifiers

是否忽略修饰符。

Boolean

False

5.2

例子:

<modulename="DeclarationOrder"/>

DefaultComesLast

描述:检查default是否在switch语句中的所有情况之后。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

skipIfLastAndSharedWithCase

是否允许default不是最后一个。

Boolean

False

7.7

例子:

<modulename="DefaultComesLast"/>

DescendantToken

描述:检查其他令牌下的受限制令牌。基本上不用。

父Module:TreeWalker

DesignForExtension

描述:检查类是否为继承而设计。基本上不用。

父Module:TreeWalker

EmptyBlock

描述:检查空的块。不验证顺序。可以通过tokens指定验证内容:如try,switch等。

父Module:TreeWalker

EmptyCatchBlock

描述:检查空的catch块。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

exceptionVariableName

指定异常变量名称,来跳过检查。

String

"^$"

6.4

commentFormat

指定catch块第一行注释内容来跳过检查。

String

".*"

6.4

例子:

<modulename="EmptyCatchBlock">

    <propertyname="exceptionVariableName" value="expected|ignore"/>

</module>

EmptyForInitializerPad

描述:检查For初始化空白填充。基本上不用。

父Module:TreeWalker

EmptyForIteratorPad

描述:检查Iterator初始化空白填充。基本上不用。

父Module:TreeWalker

EmptyLineSeparator

描述:检查标题,包,所有导入声明,字段,构造函数,方法,嵌套类,静态初始化程序和实例初始化程序之后的空行分隔符。

父Module:TreeWalker

属性:如下表

名称

描述

类型

默认值

版本

allowNoEmptyLineBetweenFields

字段之间不允许空行。

Boolean

false

5.8

allowMultipleEmptyLines

允许类成员之间多个空行。

Boolean

false

6.3

allowMultipleEmptyLinesInsideClassMembers

允许类成员中多个空行。

Boolean

false

6.18

tokens

指定Tokens

 

 

5.8

例子:

<modulename="EmptyLineSeparator"/>

EmptyStatement

描述:检查空语句,只有分号。

父Module:TreeWalker

属性:无

例子:

<modulename="EmptyStatement"/>

EqualsAvoidNull

描述:检查字符串使用equals比较是否在左侧。

父Module:TreeWalker

属性:

名称

描述

类型

默认值

版本

ignoreEqualsIgnoreCase

是否忽略String.equalsIgnoreCase()调用。

Boolean

false

5.4

例子:

<modulename="EqualsAvoidNull"/>

EqualsHashCode

描述:检查如果重写equals()方法必须要求重写hashCode()方法。

父Module:TreeWalker

属性:无

例子:

<modulename="EqualsHashCode"/>

ExecutableStatementCount

描述:基本上不用。

父Module:TreeWalker

ExplicitInitialization

描述:基本上不用。

父Module:TreeWalker

FallThrough

描述:google_checkstyle.xml中有使用,我基本上不用。

父Module:TreeWalker

FileLength

描述:检查类文件行数长度。

父Module:Checker

属性:

名称

描述

类型

默认值

版本

max

最大行数。

Boolean

false

3.2

fileExtensions

指定处理文件后缀名。

Set<String>

All Files

5.0

例子:

<modulename="FileLength">

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

</module>

FileTabCharacter

描述:检查源代码中制表符('\ t')。

父Module:Checker

属性:

名称

描述

类型

默认值

版本

eachLine

是否报告包含每一行,或只是第一个实例。

Boolean

false

5.0

fileExtensions

指定处理文件后缀名。

Set<String>

All Files

5.0

例子:

<modulename="FileTabCharacter">

    <property name="eachLine" value="true"/>

</module>

版权声明:原创文章,转载请注明出处 https://blog.csdn.net/cl_andywin/article/details/79948215

Eclipse中安装和使用CheckStyle

1. 认识Checkstyle CheckStyle是SourceForge下的一个项目,提供了一个帮助Java开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重...
  • qq_36871364
  • qq_36871364
  • 2017-05-18 15:50:39
  • 2725

checkstyle检测后的修改方法

1.工具类不应该有公有的构造函数 工具类是一系列静态成员或方法的集合,意味着它不可以被实例化,即使是抽象的工具类,它可以被继承,但也不可以有公有的构造函数。 Java类如果没有声明构造函数,则会默...
  • dubinglin
  • dubinglin
  • 2017-08-22 14:43:33
  • 432

Eclipse checkstyle 插件使用简单介绍

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

MyEclipse安装和使用checkstyle详解

  • 2013年05月15日 11:34
  • 9.61MB
  • 下载

checkStyle使用详解

简介            checkStyle是一款代码格式检查工具,它根据设置好的编码规则来自动检查代码。比如命名规范,文件长度,代码行长度等等。代码检查工具是保证项目代码质量、统一编码风格的一...
  • zhuojiajin
  • zhuojiajin
  • 2015-06-29 09:01:50
  • 2956

Checkstyle使用参考

Checkstyle使用参考一、Checkstyle简介Checkstyle 是一个帮助开发者按照某种习惯编写 java 代码的工具,他实现了代码检查的自动化,帮助人们从这种繁琐的工作中解放出来。 默...
  • hebaochen
  • hebaochen
  • 2007-01-29 17:06:00
  • 8400

安卓开发 第十篇 使用Checkstyle规范代码

嗯,2017年也到来3个月之久了,博客也好久没更新了,这点得好好反省下。一个是工作比较忙(借口),每周居然要上6天班,感觉精力有些跟不上了,最近一直在思考现在的生活是我想要的吗?公司去年年尾管理层出现...
  • naivor
  • naivor
  • 2017-03-22 21:17:01
  • 917

idea使用checkStyle

前言 阅读优雅的代码是一种享受,而看到一团糟的代码通常让人头疼,所以本文介绍下使用checkStyle进行代码检查,帮助团队统一代码规范。 安装checkstyle插件 File--》Setti...
  • gaodebao1
  • gaodebao1
  • 2017-03-10 14:16:20
  • 2173

Android Studio 的checkStyle的使用

在开发中,我们需要不仅仅是个人的超强的能力(学习能力、解决问题能力等),我们也需要团队合作能力,我们要明白,我们的成功来自于我们的团队(一个英雄是很难自靠自己的能力来创造一个时代的)。今天我们就介绍一...
  • agoodcoolman
  • agoodcoolman
  • 2016-10-09 10:29:52
  • 1925

eclipse在线安装CheckStyle

1、打开eclipse,点击“help->Install New Software...” 2、单击“Add”,输入Name:CheckStyle和Location:http://ecl...
  • u010081710
  • u010081710
  • 2016-11-01 14:50:48
  • 1488
收藏助手
不良信息举报
您举报文章:快速使用Checkstyle(一)
举报原因:
原因补充:

(最多只允许输入30个字)