最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IntelliJ?IDEA中如何使用Checkstyle對(duì)Java代碼規(guī)范檢查

 更新時(shí)間:2026年03月04日 10:07:41   作者:拽著尾巴的魚兒  
這篇文章主要介紹了IntelliJ IDEA中如何使用Checkstyle對(duì)Java代碼規(guī)范檢查的相關(guān)資料,checkstyle是提高代碼質(zhì)量,檢查代碼規(guī)范的很好用的一款工具,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

本文介紹使用CheckStyle 對(duì)java 代碼進(jìn)行規(guī)范限制。

一、Checkstyle是什么?

Checkstyle 是一款開源的代碼靜態(tài)檢查工具,主要用于 強(qiáng)制遵循代碼規(guī)范(如命名規(guī)則、代碼格式、注釋要求等),支持 Java 等語(yǔ)言。它通過預(yù)定義或自定義的規(guī)則集,自動(dòng)檢測(cè)代碼中不符合規(guī)范的問題(如類名未用 PascalCase、方法缺少 Javadoc 注釋、多余的空行等),幫助團(tuán)隊(duì)統(tǒng)一編碼風(fēng)格、提升代碼可讀性和可維護(hù)性

官網(wǎng)介紹:https://checkstyle.sourceforge.io/

二、Checkstyle 在idea 中如何配置:

2.1.idea Checkstyle 插件安裝

IDEA,進(jìn)入 File -> Settings -> Plugins,在搜索框輸入 Checkstyle,找到官方插件(通常名為 Checkstyle-IDEA),點(diǎn)擊 Install 安裝,重啟 IDEA 生效

2.2 配置 Checkstyle 規(guī)則集:

IntelliJ IDEA -> Settings -> Tools -> Checkstyle 在 Configuration File 區(qū)域配置檢查規(guī)則

在項(xiàng)目根目錄新增checkstyle.xml 的配置規(guī)則:

checkstyle.xml校驗(yàn)的內(nèi)容為:

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
        "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!-- Copyright (C) 2019 check  Holding Ltd. All Rights Reserved. -->

<module name="Checker">
    <property name="charset" value="UTF-8"/>

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

    <property name="fileExtensions" value="java, properties, xml"/>

    <!-- Headers Begin -->
    <!-- See https://checkstyle.sourceforge.io/config_header.html -->
<!--    <module name="RegexpHeader">-->
<!--        <property name="header" value="Copyright \(C\) \d{4} check  Holding Ltd. All Rights Reserved.$"/>-->
<!--    </module>-->
    <!-- Headers End -->

    <!-- Miscellaneous Begin -->
    <!-- See https://checkstyle.sourceforge.io/config_misc.html -->
    <module name="UniqueProperties"/>
    <!-- Miscellaneous End -->


    <!-- Size Violations Begin -->
    <!-- See https://checkstyle.sourceforge.io/config_sizes.html -->
    <module name="FileLength"/>
    <module name="LineLength">
        <property name="max" value="120"/>
        <!-- Ignore all imports -->
        <property name="ignorePattern" value="^import "/>
    </module>
    <!-- Size Violations End -->

    <!-- Whitespace Begin -->
    <!-- See https://checkstyle.sourceforge.io/config_whitespace.html -->
    <module name="FileTabCharacter">
        <property name="eachLine" value="true"/>
    </module>
    <!-- Whitespace End -->

    <module name="TreeWalker">

        <!-- Annotations Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_annotation.html -->
        <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="AnnotationLocation"/>
        <module name="MissingOverride"/>
        <!-- Make the @SuppressWarnings annotations available to Checkstyle -->
        <module name="SuppressWarningsHolder"/>
        <!-- Annotations End -->

        <!-- Block Checks Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_blocks.html -->
        <module name="AvoidNestedBlocks"/>
        <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="EmptyCatchBlock">
            <property name="exceptionVariableName" value="expected"/>
        </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="NeedBraces"/>
        <!-- Block Checks End -->

        <!-- Class Design Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_design.html -->
        <module name="InterfaceIsType"/>
        <!--        <module name="MutableException"/>-->
        <module name="OneTopLevelClass"/>
        <module name="ThrowsCount"/>
        <!-- Class Design End -->

        <!-- Coding Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_coding.html -->
        <!--        <module name="AvoidDoubleBraceInitialization"/>-->
        <module name="AvoidNoArgumentSuperConstructorCall"/>
        <module name="CovariantEquals"/>
        <module name="DefaultComesLast"/>
        <module name="EmptyStatement"/>
        <module name="EqualsHashCode"/>
        <module name="FallThrough"/>
        <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>
        <module name="InnerAssignment"/>
        <module name="MissingSwitchDefault"/>
        <module name="MultipleVariableDeclarations"/>
        <module name="NestedForDepth">
            <property name="max" value="3"/>
        </module>
        <module name="NestedIfDepth">
            <property name="max" value="3"/>
        </module>
        <module name="NestedTryDepth">
            <property name="max" value="2"/>
        </module>
        <module name="NoClone"/>
        <module name="NoFinalizer"/>
        <module name="OneStatementPerLine"/>
        <module name="OverloadMethodsDeclarationOrder"/>
        <module name="PackageDeclaration"/>
        <!--        <module name="ParameterAssignment"/>-->
        <module name="SimplifyBooleanExpression"/>
        <module name="SimplifyBooleanReturn"/>
        <module name="StringLiteralEquality"/>
        <!--        <module name="UnnecessaryParentheses"/>-->
        <module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
        <module name="UnnecessarySemicolonInTryWithResources"/>
        <module name="VariableDeclarationUsageDistance"/>
        <!-- Coding End -->

        <!-- Imports Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_imports.html -->
        <module name="AvoidStarImport"/>
        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
        <module name="ImportOrder">
            <property name="groups" value="java,javax,org,com"/>
            <property name="ordered" value="true"/>
            <property name="separated" value="true"/>
            <property name="option" value="TOP"/>
        </module>
        <module name="RedundantImport"/>
        <module name="UnusedImports"/>
        <!-- Imports End -->

        <!-- Javadoc Comments Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_javadoc.html -->
        <module name="JavadocParagraph">
            <property name="allowNewlineParagraph" value="false"/>
        </module>
        <module name="JavadocStyle">
            <property name="checkFirstSentence" value="false"/>
        </module>
        <module name="JavadocTagContinuationIndentation"/>

        <module name="JavadocType">
            <property name="scope" value="public"/>
        </module>
        <module name="MissingJavadocType"/>
        <module name="NonEmptyAtclauseDescription"/>
        <module name="SingleLineJavadoc">
            <property name="ignoreInlineTags" value="false"/>
        </module>
        <module name="SummaryJavadoc">
            <property name="period" value=""/>
        </module>
        <!-- Javadoc Comments End -->

        <!-- Metrics Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_metrics.html -->
        <module name="BooleanExpressionComplexity">
            <property name="max" value="7"/>
        </module>
        <!--        <module name="ClassDataAbstractionCoupling">-->
        <!--            <property name="excludeClassesRegexps" value=".*Response$,.*Request$"/>-->
        <!--        </module>-->
        <!--        <module name="ClassFanOutComplexity">-->
        <!--            <property name="excludeClassesRegexps" value=".*Response$,.*Request$"/>-->
        <!--        </module>-->
        <module name="CyclomaticComplexity"/>
        <!--        <module name="JavaNCSS"/>-->
        <!-- Metrics End -->

        <!-- Miscellaneous Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_misc.html -->
        <module name="ArrayTypeStyle"/>
        <module name="AvoidEscapedUnicodeCharacters">
            <property name="allowEscapesForControlCharacters" value="true"/>
            <property name="allowByTailComment" value="true"/>
            <property name="allowNonPrintableEscapes" value="true"/>
        </module>
        <module name="CommentsIndentation"/>
        <module name="Indentation">
            <property name="basicOffset" value="4"/>
            <property name="braceAdjustment" value="0"/>
            <property name="caseIndent" value="4"/>
            <property name="throwsIndent" value="8"/>
            <property name="lineWrappingIndentation" value="8"/>
            <property name="arrayInitIndent" value="4"/>
        </module>
        <module name="OuterTypeFilename"/>
        <module name="UpperEll"/>
        <!-- Miscellaneous End -->

        <!-- Modifiers Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_modifier.html -->
        <module name="ModifierOrder"/>
        <!-- Modifiers End -->

        <!-- Naming Conventions Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_naming.html -->
        <!--        <module name="AbbreviationAsWordInName">-->
        <!--            <property name="ignoreFinal" value="false"/>-->
        <!--            <property name="allowedAbbreviationLength" value="1"/>-->
        <!--        </module>-->
        <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>
        <!--        <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>-->
        <module name="ConstantName"/>
        <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>
        <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>
        <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>
        <module name="MemberName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
            <message key="name.invalidPattern"
                     value="Member name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <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>
        <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>
        <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>
        <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>
        <module name="TypeName">
            <message key="name.invalidPattern"
                     value="Type name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <!-- Naming Conventions End -->

        <!-- Size Violations Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_sizes.html -->
        <module name="AnonInnerLength"/>
        <!--        <module name="ExecutableStatementCount"/>-->
        <module name="MethodCount"/>
        <module name="MethodLength">
            <property name="max" value="200"/>
        </module>
        <module name="OuterTypeNumber"/>
        <module name="ParameterNumber">
            <property name="max" value="9"/>
        </module>
        <!-- Size Violations End -->

        <!-- Whitespace Begin -->
        <!-- See https://checkstyle.sourceforge.io/config_whitespace.html -->
        <module name="EmptyLineSeparator">
            <property name="allowNoEmptyLineBetweenFields" value="true"/>
        </module>
        <module name="GenericWhitespace"/>
        <module name="MethodParamPad"/>
        <module name="NoLineWrap"/>
        <module name="NoWhitespaceAfter"/>
        <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="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="ParenPad"/>
        <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>
        <module name="SingleSpaceSeparator"/>
        <module name="TypecastParenPad"/>
        <module name="WhitespaceAfter"/>
        <module name="WhitespaceAround">
            <property name="allowEmptyConstructors" value="true"/>
            <property name="allowEmptyMethods" value="true"/>
            <property name="allowEmptyTypes" value="true"/>
            <property name="allowEmptyLoops" value="true"/>
            <property name="ignoreEnhancedForColon" value="false"/>
            <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>
        <!-- Whitespace End -->

        <module name="SuppressionCommentFilter"/>
    </module>

    <module name="SuppressWarningsFilter"/>
</module>

添加本地的checkstyle 文件

最后勾選 要使用的校驗(yàn)文件,進(jìn)行apply:

2.3 idea 中配置java 的import 順序:

Editor->code Style->Java->imports 配置 導(dǎo) 包順序

(1)配置imports 都以單個(gè)文件進(jìn)行導(dǎo)入

(2)配置導(dǎo)包的屬性:

2.4 去除idea 本身保存時(shí)的格式化

三、Checkstyle 在idea 中如何使用:

配置完成后,在編寫代碼時(shí),會(huì)進(jìn)行實(shí)時(shí)校驗(yàn),鼠標(biāo)懸停可以查看提示

也可以在某個(gè)文件中,右鍵check 文件

回對(duì)該文件進(jìn)行檢查并輸出:

可以使用 代碼格式化的快捷鍵: Ctrl+Alt+L 進(jìn)行代碼格式化

如果導(dǎo)包出現(xiàn)順序問題可以使用快捷鍵:Ctrl+Alt+O 優(yōu)化導(dǎo)入的順序

總結(jié)

本文記錄在IntelliJ IDEA 中如何使用 Checkstyle對(duì)Java代碼規(guī)范檢查。

到此這篇關(guān)于IntelliJ IDEA中如何使用Checkstyle對(duì)Java代碼規(guī)范檢查的文章就介紹到這了,更多相關(guān)Checkstyle對(duì)Java代碼規(guī)范檢查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

邯郸县| 班玛县| 四子王旗| 琼中| 高台县| 安塞县| 会同县| 叶城县| 治县。| 昭觉县| 云南省| 肃北| 无锡市| 霍城县| 科技| 嘉荫县| 黄陵县| 贡嘎县| 安塞县| 阿图什市| 兰坪| 化隆| 庆城县| 浪卡子县| 柯坪县| 兴义市| 从江县| 建始县| 潢川县| 大冶市| 建瓯市| 方山县| 张掖市| 海阳市| 巴林右旗| 长阳| 金塔县| 通许县| 浮山县| 长顺县| 杨浦区|