精华内容
参与话题
问答
  • 快速使用Checkstyle(一)

    万次阅读 2018-04-15 12:39:24
    快速使用Checkstyle(一)1.介绍Checkstyle是一种代码规约工具,可以帮助程序员编写符合编码标准的Java代码。使用Checkstyle可以自定义一些代码规范用于在编译中强制执行。CheckStyle默认使用的是Sun的编码规范。...

    快速使用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>

    展开全文
  • checkstyle

    2017-09-25 13:06:33
    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。zip文件附属有安装步骤,使用好...
  • CheckStyle使用

    2020-03-03 13:27:00
    CheckStyle作为检验代码规范的插件,除了可以使用配置默认给定的开发规范,如Sun的,Google的开发规范啊,也可以导入像阿里的开发规范的插件。事实上,每一个公司都存在不同的开发规范要求,所以大部分公司会给定...
    CheckStyle作为检验代码规范的插件,除了可以使用配置默认给定的开发规范,如Sun的,Google的开发规范啊,也可以导入像阿里的开发规范的插件。事实上,每一个公司都存在不同的开发规范要求,所以大部分公司会给定自己的check规范,一般导入给定的checkstyle.xml文件即可实现。
    
    作为新人,我checkstyle了一整个项目,苦不堪言,所以大家怕是还是多注意代码规范啊,利人利己。这边有阿里的开发手册提供给大家参考,github上面也有。
    

    链接:https://pan.baidu.com/s/1MTDlJuBgTh1y65MsV6dZDA
    提取码:uebp
    复制这段内容后打开百度网盘手机App,操作更方便哦

    楼主用的是idea,所以先说一下插件的导入,然后再细说怎么修改不规范的代码。

    1.导入CheckStyle插件

    1.File ——> setting 安装插件**
    在这里插入图片描述
    在这里插入图片描述
    也可以下载阿里的开发规范,看个人需求和喜好。
    在这里插入图片描述

    2.配置插件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.开始C

    选择你需要checkstyle的类右击:
    在这里插入图片描述
    点击checkstyle,因为我导入的是阿里巴巴,使用checkstyle的按键被占用了,懒得弄了,阿里蛮好的

    或者:
    在这里插入图片描述

    2.报错原因和处理方式

    原则:少改动代码,处理时候不盲目大意,git提交多写点改动的情况。

    1.第一大类:注解问题

    缺少注解,点击问题即可跳转到缺少注解的地方

    在这里插入图片描述
    注解不全,补齐就行
    在这里插入图片描述
    补齐,每一个@的值都要完整
    在这里插入图片描述
    2.字符占位问题
    在这里插入图片描述
    先按自己的需求设置code style
    在这里插入图片描述
    然后右击选择 在这里插入图片描述即可解决

    展开全文
  • CheckStyle使用总结

    千次阅读 2018-12-20 16:08:04
    最近在搞代码规范的问题,有了规范自然要有检查是否符合规范的措施,于是自然了解到了 checkstyle 。 官网地址:https://checkstyle.org/   插件使用   在AndroidStudio中直接搜索上面红框标注的插件并安装...

     

    最近在搞代码规范的问题,有了规范自然要有检查是否符合规范的措施,于是自然了解到了 checkstyle 。

    官网地址:https://checkstyle.org/

     

    插件使用

     

    在AndroidStudio中直接搜索上面红框标注的插件并安装重启Studio即可。安装完后在设置页面可以对插件进行一些配置,如下:

     

    插件使用比较简单,关键在于定义自己的checkstyle文件,下面附上一份自己根据google checkstyle更改的版本。

    <module name="Checker">
        <!--字符集编码-->
        <property name="charset" value="UTF-8" />
        <!--违规级别-->
        <property name="severity" value="warning" />
        <!--可接受的文件扩展名-->
        <property name="fileExtensions" value="java, properties, xml" />
        <!--检查文件是否包含制表符-->
        <module name="FileTabCharacter">
            <property name="eachLine" value="true" />
        </module>
    
        <!--检查Java源文件并定义一些适用于检查此类文件的一些属性-->
        <module name="TreeWalker">
            <!--检查外部类型名称和文件名是否匹配,例如,类Foo必须位于名为Foo.java的文件中-->
            <module name="OuterTypeFilename" />
            <!--检查不合规的文本-->
            <module name="IllegalTokenText">
                <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL" />
                <property name="format"
                    value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)" />
                <property name="message"
                    value="Consider using special escape sequence instead of octal value or Unicode escaped value." />
            </module>
            <!--限制使用Unicode转义-->
            <module name="AvoidEscapedUnicodeCharacters">
                <property name="allowEscapesForControlCharacters" value="true" />
                <property name="allowByTailComment" value="true" />
                <property name="allowNonPrintableEscapes" value="true" />
            </module>
            <!--检查行长度-->
            <module name="LineLength">
                <property name="max" value="200" /><!--mine-->
                <!--可以忽略检查的行-->
                <property name="ignorePattern"
                    value="^package.*|^import.*|a href|href|http://|https://|ftp://" />
            </module>
            <!--检查使用*表示的import语句-->
            <module name="AvoidStarImport" />
            <!--检查每个顶级类,接口或枚举是否驻留在自己的源文件中-->
            <module name="OneTopLevelClass" />
            <!--检查所选语句是否不是换行的-->
            <module name="NoLineWrap" />
            <!--检查空块但不验证顺序块-->
            <module name="EmptyBlock">
                <property name="option" value="TEXT" />
                <property name="tokens"
                    value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH" />
            </module>
            <!--检查代码块周围的大括号-->
            <module name="NeedBraces">
                <!--允许没有大括号的单行语句-->
                <property name="allowSingleLineStatement" value="true" /><!--mine-->
            </module>
            <!--检查代码块的左花括号('{')的位置-->
            <module name="LeftCurly" />
            <!--检查右花括号的位置('}')-->
            <module name="RightCurly">
                <property name="id" value="RightCurlySame" />
                <property name="tokens"
                    value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO" />
            </module>
            <module name="RightCurly">
                <property name="id" value="RightCurlyAlone" />
                <property name="option" value="alone" />
                <property name="tokens"
                    value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT" />
            </module>
            <!--检查令牌是否被空格包围-->
            <module name="WhitespaceAround">
                <property name="allowEmptyConstructors" value="true" />
                <property name="allowEmptyMethods" value="true" />
                <property name="allowEmptyTypes" value="true" />
                <property name="allowEmptyLoops" value="true" />
                <message key="ws.notFollowed"
                    value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)" />
                <message key="ws.notPreceded"
                    value="WhitespaceAround: ''{0}'' is not preceded with whitespace." />
            </module>
            <!--检查每行只有一个语句-->
            <module name="OneStatementPerLine" />
            <!--检查每个变量声明是否在它自己的语句中并且在它自己的行中-->
            <module name="MultipleVariableDeclarations" />
            <!--检查数组类型定义的样式-->
            <module name="ArrayTypeStyle" />
            <!--检查switch语句是否具有“default”子句-->
            <module name="MissingSwitchDefault" />
            <!--检查switch语句-->
            <module name="FallThrough" />
            <!--检查常量是否用大写定义-->
            <module name="UpperEll" />
            <!--检查修饰符是否符合Java建议-->
            <module name="ModifierOrder" />
            <!--检查空行分隔符-->
            <module name="EmptyLineSeparator">
                <!--字段之间不允许空行-->
                <property name="allowNoEmptyLineBetweenFields" value="true" />
            </module>
            <!--检查使用分隔符的换行-->
            <module name="SeparatorWrap">
                <property name="id" value="SeparatorWrapDot" />
                <property name="tokens" value="DOT" />
                <property name="option" value="nl" />
            </module>
            <module name="SeparatorWrap">
                <property name="id" value="SeparatorWrapComma" />
                <property name="tokens" value="COMMA" />
                <property name="option" value="EOL" />
            </module>
            <module name="SeparatorWrap">
                <!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
                <property name="id" value="SeparatorWrapEllipsis" />
                <property name="tokens" value="ELLIPSIS" />
                <property name="option" value="EOL" />
            </module>
            <module name="SeparatorWrap">
                <!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
                <property name="id" value="SeparatorWrapArrayDeclarator" />
                <property name="tokens" value="ARRAY_DECLARATOR" />
                <property name="option" value="EOL" />
            </module>
            <module name="SeparatorWrap">
                <property name="id" value="SeparatorWrapMethodRef" />
                <property name="tokens" value="METHOD_REF" />
                <property name="option" value="nl" />
            </module>
            <!--检查包名称是否符合format属性指定的格式-->
            <module name="PackageName">
                <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
                <message key="name.invalidPattern"
                    value="Package name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查类型名称是否符合format属性指定的格式-->
            <module name="TypeName">
                <message key="name.invalidPattern"
                    value="Type name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查实例变量名称是否符合format属性指定的格式-->
            <module name="MemberName">
                <property name="format" value="^[a-z][a-zA-Z0-9]*$" /><!--mine-->
                <message key="name.invalidPattern"
                    value="Member name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查参数名称是否符合format属性指定的格式-->
            <module name="ParameterName">
                <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
                <message key="name.invalidPattern"
                    value="Parameter name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查以验证lambda参数名称-->
            <module name="LambdaParameterName">
                <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
                <message key="name.invalidPattern"
                    value="Lambda parameter name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查catch参数名称是否符合format属性指定的格式-->
            <module name="CatchParameterName">
                <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
                <message key="name.invalidPattern"
                    value="Catch parameter name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查本地、非final变量名称是否符合format属性指定的格式-->
            <module name="LocalVariableName">
                <property name="tokens" value="VARIABLE_DEF" />
                <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
                <message key="name.invalidPattern"
                    value="Local variable name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查类类型参数名称是否符合format属性指定的格式-->
            <module name="ClassTypeParameterName">
                <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
                <message key="name.invalidPattern"
                    value="Class type name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查方法类型参数名称是否符合format属性指定的格式-->
            <module name="MethodTypeParameterName">
                <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
                <message key="name.invalidPattern"
                    value="Method type name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查接口类型参数名称是否符合format属性指定的格式-->
            <module name="InterfaceTypeParameterName">
                <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
                <message key="name.invalidPattern"
                    value="Interface type name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--验证类中没有定义finalize()方法-->
            <module name="NoFinalizer" />
    
            <module name="GenericWhitespace">
                <message key="ws.followed"
                    value="GenericWhitespace ''{0}'' is followed by whitespace." />
                <message key="ws.preceded"
                    value="GenericWhitespace ''{0}'' is preceded with whitespace." />
                <message key="ws.illegalFollow"
                    value="GenericWhitespace ''{0}'' should followed by whitespace." />
                <message key="ws.notPreceded"
                    value="GenericWhitespace ''{0}'' is not preceded with whitespace." />
            </module>
            <!--检查Java代码的正确缩进-->
            <module name="Indentation">
                <!--换行默认缩进字符数-->
                <property name="basicOffset" value="4" /><!--mine-->
                <!--在下一行时,大括号应缩进多远-->
                <property name="braceAdjustment" value="0" />
                <property name="caseIndent" value="4" /><!--mine-->
                <property name="throwsIndent" value="4" />
                <property name="lineWrappingIndentation" value="4" />
                <property name="arrayInitIndent" value="4" /><!--mine-->
            </module>
            <!--检查连续大写字母的长度-->
            <module name="AbbreviationAsWordInName">
                <property name="ignoreFinal" value="false" />
                <property name="allowedAbbreviationLength" value="3" /><!--mine-->
            </module>
            <!--检查重载方法是否组合在一起-->
            <module name="OverloadMethodsDeclarationOrder" />
            <!--检查变量声明与其首次使用之间的距离-->
            <module name="VariableDeclarationUsageDistance" />
            <!--检查导入声明组是否按用户指定的顺序显示-->
            <module name="CustomImportOrder">
                <!--是否按字母顺序导包-->
                <property name="sortImportsInGroupAlphabetically" value="false" /><!--mine-->
                <property name="separateLineBetweenGroups" value="true" />
                <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE" />
            </module>
            <!--检查方法名称和左括号之间的空格-->
            <module name="MethodParamPad" />
            <!--检查tokens指定的字符前面是否有空格-->
            <module name="NoWhitespaceBefore">
                <property name="tokens"
                    value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF" />
                <property name="allowLineBreaks" value="true" />
            </module>
            <!--检查左括号后和右括号前是否需要空格-->
            <module name="ParenPad" />
            <!--检查运算符上换行的策略-->
            <module name="OperatorWrap">
                <property name="option" value="NL" />
                <property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
                        LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF " />
            </module>
            <!--检查语言元素上注释的位置-->
            <module name="AnnotationLocation">
                <property name="id" value="AnnotationLocationMostCases" />
                <property name="tokens"
                    value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF" />
            </module>
    
            <module name="AnnotationLocation">
                <property name="id" value="AnnotationLocationVariables" />
                <property name="tokens" value="VARIABLE_DEF" />
                <property name="allowSamelineMultipleAnnotations" value="true" />
            </module>
            <!--检查@子句后面的描述是否为空-->
            <module name="NonEmptyAtclauseDescription" />
            <!--检查@子句的缩进-->
            <module name="JavadocTagContinuationIndentation" />
            <!--检查Javadoc摘要语句是否包含不建议使用的短语-->
            <module name="SummaryJavadoc">
                <property name="forbiddenSummaryFragments"
                    value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )" />
                <!--指定第一个javadoc句末尾的结束符-->
                <property name="period" value="" /><!--mine-->
            </module>
            <!--检查Javadoc段落-->
            <module name="JavadocParagraph" />
            <!--检查@子句的顺序-->
            <module name="AtclauseOrder">
                <property name="tagOrder" value="@param, @return, @throws, @deprecated" />
                <property name="target"
                    value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" />
            </module>
            <!--检查方法或构造函数的Javadoc-->
            <module name="JavadocMethod">
                <property name="allowMissingJavadoc" value="true" /><!--mine-->
                <property name="scope" value="public" />
                <property name="allowMissingParamTags" value="true" />
                <property name="allowMissingThrowsTags" value="true" />
                <property name="allowMissingReturnTag" value="true" />
                <property name="minLineCount" value="2" />
                <property name="allowedAnnotations" value="Override, Test" />
                <property name="allowThrowsTagsForSubclasses" value="true" />
            </module>
            <!--检查方法名称是否符合format属性指定的格式-->
            <module name="MethodName">
                <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$" />
                <message key="name.invalidPattern"
                    value="Method name ''{0}'' must match pattern ''{1}''." />
            </module>
            <!--检查JavaDoc块是否可以放在一行中,并且不包含@子句-->
            <module name="SingleLineJavadoc">
                <property name="ignoreInlineTags" value="false" />
            </module>
            <!--检查空catch块-->
            <module name="EmptyCatchBlock">
                <property name="exceptionVariableName" value="expected" />
            </module>
            <!--控制注释和周围代码之间的缩进-->
            <module name="CommentsIndentation" />
        </module>
    </module>

     

    展开全文
  • CheckStyle个人使用完整总结

    万次阅读 2018-12-25 16:38:07
    CheckStyle作为检验代码规范的插件,除了可以使用配置默认给定的开发规范,如Sun的,Google的开发规范啊,也可以导入像阿里的开发规范的插件。事实上,每一个公司都存在不同的开发规范要求,所以大部分公司会给定...

        CheckStyle作为检验代码规范的插件,除了可以使用配置默认给定的开发规范,如Sun的,Google的开发规范啊,也可以导入像阿里的开发规范的插件。事实上,每一个公司都存在不同的开发规范要求,所以大部分公司会给定自己的check规范,一般导入给定的checkstyle.xml文件即可实现。

        作为新人,我checkstyle了一整个项目,苦不堪言,所以大家怕是还是多注意代码规范啊,利人利己。这边有阿里的开发手册提供给大家参考,github上面也有。

    链接:https://pan.baidu.com/s/1MTDlJuBgTh1y65MsV6dZDA 
    提取码:uebp 
    复制这段内容后打开百度网盘手机App,操作更方便哦

        楼主用的是idea,所以先说一下插件的导入,然后再细说怎么修改不规范的代码。

    1.导入CheckStyle插件

    1.File ——> setting 安装插件

    也可以下载阿里的开发规范,看个人需求和喜好。

    2.配置插件

    3.开始C

    选择你需要checkstyle的类右击:

    点击checkstyle,因为我导入的是阿里巴巴,使用checkstyle的按键被占用了,懒得弄了,阿里蛮好的

    或者:

     

    2.报错原因和处理方式

    原则:少改动代码,处理时候不盲目大意,git提交多写点改动的情况。

     1.第一大类:注解问题

    缺少注解,点击问题即可跳转到缺少注解的地方

     

    注解不全,补齐就行

    补齐,每一个@的值都要完整

    2.字符占位问题

       先按自己的需求设置code style

    然后右击选择即可解决

     

    tab问题的话

     

    https://blog.csdn.net/q316510202/article/details/50777942  有eclisp的解决方式,idea的话。默认情况下的是tab=4个空格,不存在tab的情况的,其实我也不会,欢迎补充。

    3.见名知意

     按要求改就ok了

    删掉就行

    4.格式问题

    名字问题

    建议少改动,如果是公共类,影响较大,还是提前多留意吧。

    5.逻辑错误

     

    6.导包顺序

    类似这种情况的,都是导包顺序没有按照checkstyle的规范,一般情况下,eclispe的ctrl + shift + o 快捷键可以解决这个盗版问题,idea的也一样,当然也可以右击选择

     

    未完,如果遇到问题会继续更新。。。

    展开全文
  • 代码规范工具-Checkstyle使用手册

    万次阅读 2012-06-16 14:25:15
    前段时间中心需要对外包的项目进行代码质量管理,所以在此对前段时间的工作做下总结。  现在很多开源工具都可以对代码进行规范审核,比较流行的有以下几款,大致给个简单介绍。  PMD:是一款采用BSD协议发布的...
  • Checkstyle介绍

    万次阅读 2011-05-08 19:52:00
    一、主要作用保证Java的编码规范被正确实施,避免一些常见的编码问题二、在Eclipse中集成Checkstyle插件从此处安装http://eclipse-cs.sf.net/update/三、Checkstyle规则(1)Javadoc Comments(Javadoc相关)Package...
  • Checkstyle结果输出

    千次阅读 2011-08-26 20:29:09
    序号 输出内容意义 1 Type is missing a javadoc commentClass 缺少类型说明 2“{” should be on the previous line “{” 应该位于前一行 3Methos is missing a java
  • Checkstyle常见输出结果

    千次阅读 2011-12-22 16:23:42
    1.Type is missing a javadoc commentClass  缺少类型说明 2.“{” should be on the previous line “{” 应该位于前一行 3.Methods is missing a javadoc comment 方法前面缺少javadoc注释 ...
  • CheckStyle

    2019-07-26 08:49:14
    code Review.doc 博文链接:https://sislover.iteye.com/blog/656514
  • CHECKSTYLE使用

    千次阅读 2007-12-06 10:32:00
    主页:http://checkstyle.sourceforge.net/ECLIPSE插件主页:http://eclipse-cs.sourceforge.net/Eclipse插件CheckStyle安装以及使用第一部分Checkstyle的使用介绍 Checkstyle是一个开发工具,可以帮助编程人员编写...
  • IDEA checkStyle

    千次阅读 2017-07-27 09:22:19
    安装File–>Settings–>Plugins配置重启IDEAFile–>Settings–>Editor–>InspectionsFile–>Settings–>Other Settings–>Checkstyle checkStyle.xml <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD
  • Checkstyle

    2012-12-17 11:59:07
    Checkstyle这个东西也是之前就听过,但是一直没用过,今天有空,就尝试着用了一下,下面的参考链接和真实的情况可能有差异,仅供参考。   Checkstyle http://baike.baidu.com/view/4891779.htm Eclipse的...
  • 安装checkStyle插件以及配置 安装:直接update,添加更新源地址:http://eclipse-cs.sf.net/update/,也可以从http://sourceforge.net/p
  • 自定义checkstyle

    千次阅读 2016-08-31 10:40:26
    定制检查:Checkstyle没有图形化的定制器,所以需要手工修改配置文件。比如,我们的代码需要符合下列规则: * 长度方面:文件长度不超过1500行,每行不超过120个字,方法不超过60行. * 命名方面:类名不...
  • 在idea中使用CheckStyle来规范代码

    万次阅读 2018-12-14 11:36:56
    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。 idea版(版本:2018.2) ...
  • IDEA CheckStyle

    千次阅读 2018-07-14 13:32:05
    CheckStyle 是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。CheckStyle检验的主要内容·...
  • checkstyle常见错误

    千次阅读 2014-12-17 19:20:03
    http://commons.apache.org/proper/commons-jelly/libs/http/checkstyle-report.html 1 提示:Type is missing a javadoc commentClass 说明:缺少类型说明 解决方法:增加javadoc说明 2 提示:“{” ...
  • AndroidStudio的CheckStyle

    2019-01-14 15:50:55
    AndroidStuido如何进行checkstyle, 如图所示,Gradle-&gt;选中工程名-&gt;Tasks-&gt;other-&gt;checkstyle 运行后,在工程目录下生成checkstyle_report.html文件
  • checkStyle的使用

    千次阅读 2018-08-20 13:29:42
    checkStyle的使用 为了提高代码规范,保证代码注释的完整,打算修改类和方法的注释,让开发人员能够便捷高效的生成对应注释和说明,但是并不能强制开发人员在每个方法添加注释,无形之中会增加代码评审的工作量,...
  • gradle checkstyle配置

    千次阅读 2016-10-18 18:41:44
    <?xml version="1.0"?><!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"><suppressions> <suppress checks="IllegalT
  • 在eclipse上Checkstyle的安装和使用

    万次阅读 多人点赞 2014-06-19 11:28:30
    1.概述 随着中心的代码规范的建立和实施,项目组对代码...相信很多人都知道Checkstyle这个编码规范工具,本文讲述了Checkstyle在eclipse中的安装过程,以及使用方法。希望通过本文,让大家能简单快速的掌握Checkstyle
  • 本文主要介绍CheckStyle 5.6.1版本的各个规则配置项目,这个版本的CheckStyle将样式规则分为了以下十七种类型: 1. Annotations(注解:5个) Annotation Use Style(注解使用风格) 这项检查可以...
  • Android Studio集成CheckStyle

    千次阅读 2018-04-28 17:22:23
    &nbsp;&nbsp;&nbsp;&nbsp;CheckStyle是一种Java代码规范检查工具,它遵循...配置好CheckStyle的gradle脚本后,通过gradle task就可以输出html或者xml的扫描结果;而插件方式相比于gradle脚本的方式...
  • Checkstyle 系列之认识 Checkstyle

    千次阅读 2013-12-28 14:42:36
    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具,可以帮助程序员编写一个符合编码标准的Java代码。它可以自动有效的帮助我们检视代码以便更好的遵循代码编写标准,这使得...
  • IDEA 安装checkstyle插件

    万次阅读 2018-05-23 09:18:45
    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。IDEA安装CheckStyle插件步骤:1...
  • checkstyle 规范 (包含 codeformatter codetemplates checkstyle 文件) http://knight-black-bob.iteye.com/blog/2327160 该文章 有使用说明
  • 代码检查工具系列——CheckStyle

    千次阅读 2016-03-21 00:34:49
    前言 大家都知道有很多公司拥有外包团队,而外包团队当任务完成后,很多...本篇博客将主要讲述CheckStyle,看完本篇博客可以让你知道和基本掌握CheckStyle的使用。CheckStyle CheckStyle是SourceForge下的一个项目
  • checkStyle配置说明、范例和结果分析

    千次阅读 2017-02-09 13:18:04
    转自:http://www.blogjava.net/japper/archive/2012/05/24/379054.html 1xml version="1.0"?> ... 2DOCTYPE module PUBLIC ... 3 "-//Puppy Crawl//DTD Check Configuration 1.2//EN" ...
  • CheckStyle使用详细手册

    千次阅读 2012-08-13 10:19:52
    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从 而使得开发人员从这项重要,但是枯燥的任务中解脱出来。 CheckStyle默认提供一下...

空空如也

1 2 3 4 5 ... 20
收藏数 11,102
精华内容 4,440
关键字:

checkstyle