java checkstyle 导入_Checkstyle的配置详解

Checkstyle是一款检查java程序代码样式的工具,可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的样式规范和统一。Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了可以使用它提供的sun的代码标准外,你也可以定制自己的标准。我们可以在eclipse中安装checkstyle的插件,来方便我们的使用。

Checkstyle可以让我们养成书写良好代码风格的习惯,代码的整洁也减少了很多bad smell的产生。使用checkstyle的过程中可能需要经常的调整配置文件,有些check过于严格,可以根据实际情况取消一些代码检查。

Checkstyle的配置

Checkstyle配置是通过指定modules来应用到java文件的。modules是树状结构,以一个名为Checker的module作为root节点,一般的checker都会包括TreeWalker子module。我们可以参照checkstyle中的sun_checks.xml,这是根据sun的java语言规范写的配置。

在xml配置文件中通过module的name属性来区分module,module的Properties可以控制如何去执行这个module,每个property都有一个默认值,所有的check都有一个severity属性,用它来指定check的level。TreeWalker为每个java文件创建一个语法树,在节点之间调用submodules的Checks。

下面来看看standard checks中的一些具体用法。

Javadoc Comments

lJavadocPackage

检查每个java package中是否有java注释文件,默认是允许一个package-info.java,也可以通过allowLegacy属性配置允许package.html。

lJavadocType

检查类和接口的javadoc。默认不检查author 和version tags。

lJavadocMethod

检查方法和构造函数的javadoc。默认不检查未使用的异常抛出。

lJavadocVariable

检查变量的javadoc。

lJavadocStyle

检查javadoc的格式。比如:javadoc的第一行是否以句号结束,javadoc除了tags外是否有description,检查javadoc中的html格式。

lWriteTag

输出javadoc中的tag。

Naming Conventions

lAbstractClassName

检查抽象类名。

lClassTypeParameterName

检查类的Parameter名。

lConstantName

检查常量名。

lLocalFinalVariableName

检查局部的final类型变量名,包括catch的参数。

lLocalVarableName

检查局部的非final类型的变量名,包括catch的参数。

lMemberName

检查非静态变量。

lMethodName

检查方法名。

lMethodTypeParameterName

检查方法的参数名。

lPackageName

检查包名。

lParameterName

检查参数名。

lStaticVariableName

检查静态的,非final类型的变量名。

lTypeName

检查类名和接口名。

Imports

lAvoidStarImport

检查是否有使用*进行import。

lAvoidStaticImport

检查是否有静态import。比如是否导入了java.lang包中的内容。

lIllegalImport

检查是否import了违法的包。默认拒绝import所有sun.*包。

lRedundanImport

检查是否有重复的import。

lUnusedImports

检查是否有未使用的import。

lImportOrder

检查import的分组和顺序。

lImportControl

控制可import的包。在一个较大的project可限制使用过多的第三方包,通过一个依照文件来指定。

Size Violations

lExecutableStatementCount

限制可执行代码片段的长度。默认为30。

lFileLength

检查java文件的长度。默认为2000。

lLineLength

检查代码行的长度。默认为80。

lMethodLength

检查方法和构造函数的长度。默认为150。

lAnonInnerLength

检查匿名内部类的长度。默认为20。

lParameterNumber

检查方法和构造函数的参数个数。默认为7。

Whitespace

lGenericWhitespace

检查周围的空白。

lEmptyForInitializerPad

检查空的初始化位置的空白。比如for循环中的初始化。

lEmptyForIteratorPad

检查空的迭代位置的空白。

lMethodParamPad

检查方法签名之前的空白。

lNoWhitespaceAfter

检查分隔符后的空白。

lNoWhitespaceBefore

检查分隔符前的空白。

lOperatorWrap

检查操作符的空白规则。

lParenPad

检查圆括号的空白规则。

lTypecaseParenPad

检查强制转型的圆括号的空白规则。

lTabCharacter

检查是否有Tab字符(’"t’)。

lWhitespaceAfter

检查分隔符是否在空白之后。

lWhitespaceAround

检查分隔符周围是否有空白。

ModifierOrder

lModifierOrder

检查修饰符的顺序是否遵照java语言规范。

lRedundantModifier

检查接口和annotation中是否有重复的修饰符。

Block Checks

lEmptyBlock

检查空的代码块。

lLeftCurly

检查’{’和左边的代码块是否在同一行。

lNeedBraces

检查是否需要大括号。主要是在if,else时的情况。

lRightCurly

检查’}’。

lAvoidNestedBlocks

检查不需要的嵌套’{}’。

Coding

lArrayTrailingComma

检查数组初始化是否以逗号结束。

lAvoidInlineConditionals

检查inline的条件操作。

lCovariantEquals

检查类是否覆盖了equals(java.lang.Object)。

lDoubleCheckedLocking

检查DCL的问题。

lEmptyStatement

检查空的代码段。

lEqualsAvoidNull

检查一个可能为null的字符串是否在equals()比较的左边。

lEqualsHashCode

检查类是否覆盖了equals()和hashCode()。

lFinalLocalVariable

检查未改变过的局部变量是否声明为final。

lHiddenField

检查局部变量或参数是否隐藏了类中的变量。

lIllegalInstantiation

检查是否使用工厂方法实例化。

lIllegalToken

检查非法的分隔符。

lIllegalTokenText

检查非法的分隔符的下个字符。

lInnerAssignment

检查子表达式中是否有赋值操作。

lMagicNumber

检查是否有“magic numbers”。

lMissingSwitchDefault

检查switch语句是否有default的clause。

lModifiedControlVariable

检查循环控制的变量是否在代码块中被修改。

lRedundantThrows

检查是否有被重复抛出的异常。

lSimplifyBooleanExpression

检查是否有过度复杂的布尔表达式。

lSimplifyBooleanReturn

检查是否有过于复杂的布尔返回代码段。

lStringLiteralEquality

检查字符串是否有用= =或!=进行操作。

lNestedIfDepth

检查嵌套的层次深度。

lNestedTryDepth

检查try的层次深度。

lNoClone

检查是否覆盖了clone()。

lNoFinalizer

检查是否有定义finalize()。

lSuperClone

检查覆盖的clone()是否有调用super.clone()。

lSuperFinalize

检查覆盖的finalize()是否有调用super.finalize()。

lIllegalCatch

检查是否catch了不能接受的错误。

lIllegalThrows

检查是否抛出了未声明的异常。

lPackageDeclaration

检查类中是否有声明package。

lJUnitTestCase

确保setUp(), tearDown()方法签名的正确性。

lReturnCount

限制return代码段的数量。

lIllegalType

检查未使用过的类。

lDeclarationOrder

检查类和接口中的声明顺序。

lParameterAssignment

检查不允许的参数赋值。

lExplicitInitialization

检查类和对象成员是否初始化为默认值。

lDefaultComesLast

检查default的clause是否在switch代码段的最后。

lMissingCtor

检查类依赖。

lFallThrough

检查switch代码的case中是否缺少break,return,throw和continue。

lMultipleStringLiterals

检查一个文件中是否有多次出现的字符串。

lMultipleVariableDeclarations

检查代码段和代码行中是否有多次变量声明。

lRequireThis

检查代码中是否有“this.”。

lUnnecessaryParentheses

检查是否有使用不需要的圆括号。

Class Design

lVisibilityModifier

检查类成员的可见度。

lFinalClass

检查只有private构造函数的类是否声明为final。

lInterfaceIsType

检查接口是否仅定义类型。

lHideUtilityClassConstructor

检查工具类是否有putblic的构造器。

lDesignForExension

检查类是否为扩展设计。

lMutableException

确保异常是不可变的。

lThrowsCount

限制抛出异常的数量。

Duplicate Code

lStrictDuplicateCode

严格检查重复代码。

Miscellaneous

lGenericIllegalRegexp

正则表达式的模式检查。

lNewlineAtEndOfFile

检查文件是否以一个空行结束。

lTodoComment

检查TODO:注释。

lTranslation

检查property文件中是否有相同的key。

lUncommentedMain

检查是否有未注释的main方法。

lUpperEll

检查long型约束是否有大写的“L”。

lArrayTypeStyle

检查数组类型定义的样式。

lFinalParameters

检查方法名、构造函数、catch块的参数是否是final的。

lIndentation

检查代码中正确的缩进。

lTrailingComment

确保是否要代码行注释。

lRequiredRegexp

确保一个指定的正则表达式的规则已经存在代码中。

Checkstyle常见的错误提示

1.Type is missing a javadoc commentClass

缺少类型说明

2.“{” should be on the previous line

“{” 应该位于前一行

3.Methods is missing a javadoc comment

方法前面缺少javadoc注释

4.Expected @throws tag for “Exception”

在注释中希望有@throws的说明

5.“.” Is preceeded with whitespace “.”

前面不能有空格

6.“.” Is followed by whitespace“.”

后面不能有空格

7.“=” is not preceeded with whitespace

“=” 前面缺少空格

8.“=” is not followed with whitespace

“=” 后面缺少空格

9.“}” should be on the same line

“}” 应该与下条语句位于同一行

10.Unused @param tag for “unused”

没有参数“unused”,不需注释

11.Variable “CA” missing javadoc

变量“CA”缺少javadoc注释

12.Line longer than 80characters

行长度超过80

13.Line contains a tab character

行含有”tab” 字符

14.Redundant “Public” modifier

冗余的“public” modifier

15.Final modifier out of order with the JSL

suggestionFinal modifier的顺序错误

16.Avoid using the “.*” form of import

Import格式避免使用“.*”

17.Redundant import from the same package

从同一个包中Import内容

18.Unused import-java.util.list

Import进来的java.util.list没有被使用

19.Duplicate import to line 13

重复Import同一个内容

20.Import from illegal package

从非法包中 Import内容

21.“while” construct must use “{}”

“while” 语句缺少“{}”

22.Variable “sTest1” must be private and have accessor method

变量“sTest1”应该是private的,并且有调用它的方法

23.Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$”

变量“ABC”不符合命名规则“^[a-z][a-zA-Z0-9]*$”

24.“(” is followed by whitespace

“(” 后面不能有空格

25.“)” is proceeded by whitespace

“)” 前面不能有空格

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值