统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,本文将介绍常用的统一风格的措施之静态样式检查 。@anarkh
统一样式检查
在标准化的统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,而不是国内阿里的代码规约插件。
- 下载插件

- 配置生效
配置生效及告警设置

- 配置checkstyle.xml
- 官网地址 https://checkstyle.sourceforge.io/
- 官网最新Releases https://github.com/checkstyle/checkstyle/releases/
- 下面不是最新的版本,但是提供了中文的解释,可以参考下;实际使用时或者兼容问题请到官网下载最新的规则;
xml
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker">
<module name="JavadocType">
<property name="authorFormat" value="\S"/>
<property name="scope" value="protected"/>
<property name="versionFormat" value="\$Revision.*\$"/>
<property name="excludeScope" value="public"/>
<property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>
</module>
<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"/>
<property name="allowMissingPropertyJavadoc" value="true"/>
</module>
<module name="JavadocVariable">
<property name="scope" value="private"/>
</module>
<module name="AbstractClassName">
<property name="format" value="^Abstract.*$|^.*Factory$"/>
</module>
<module name="ConstantName">
<property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
</module>
<module name="LocalFinalVariableName">
<property name="format" value="^[A_Z][A-Z0-9]*(_[A_Z0-9]+)*$"/>
</module>
<module name="LocalVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
<property name="applyToPublic" value="true"/>
<property name="applyToProtected" value="true"/>
<property name="applyToPackage" value="true"/>
<property name="applyToPrivate" value="true"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="StaticVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="TypeName">
<property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
<property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>
</module>
<module name="AvoidStarImport">
<property name="excludes" value="java.io,java.util"/>
</module>
<module name="IllegalImport"/>
<module name="ImportOrder">
<property name="groups" value="java,javax"/>
<property name="ordered" value="true"/>
<property name="separated" value="true"/>
<property name="caseSensitive" value="true"/>
</module>
<module name="RedundantImport"/>
<module name="UnusedImports"/>
<module name="AnonInnerLength">
<property name="max" value="20"/>
</module>
<module name="ExecutableStatementCount">
<property name="max" value="20"/>
<property name="tokens" value="CTOR_DEF,METHOD_DEF,STATIC_INIT,INSTANCE_INIT"/>
</module>
<module name="FileLength">
<property name="max" value="1000"/>
</module>
<module name="LineLength">
<property name="max" value="80"/>
<property name="ignorePattern" value="^ *\* *[^ ]+$"/>
</module>
<module name="MethodLength">
<property name="max" value="100"/>
<property name="countEmpty" value="true"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<module name="ParameterNumber">
<property name="max" value="10"/>
<property name="tokens" value="METHOD_DEF,CTOR_DEF"/>
</module>
<module name="EmptyForInitializerPad">
<property name="option" value="space"/>
</module>
<module name="EmptyForIteratorPad">
<property name="option" value="space"/>
</module>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap">
<property name="tokens"
value="ASSIGN, DIV, DIV_ASSIGN, PLUS_ASSIGN, MINUS, MINUS_ASSIGN, STAR, STAR_ASSIGN, MOD, MOD_ASSIGN, SR, SR_ASSIGN, BSR, BSR_ASSIGN, SL, SL_ASSIGN, BXOR, BXOR_ASSIGN, BOR, BOR_ASSIGN, BAND, BAND_ASSIGN,PLUS, QUESTION"/>
<property name="option" value="eol"/>
</module>
<module name="MethodParamPad">
<property name="allowLineBreaks" value="false"/>
<property name="option" value="space"/>
<property name="tokens" value="METHOD_DEF,CTOR_DEF"/>
</module>
<module name="ParenPad">
<property name="option" value="nospace"/>
</module>
<module name="TypecastParenPad">
<property name="option" value="space"/>
</module>
<module name="TabCharacter"/>
<module name="WhitespaceAfter">
<property name="tokens" value="COMMA,SEMI,TYPECAST"/>
</module>
<module name="WhitespaceAround">
<property name="tokens" value="ASSIGN"/>
</module>
<module name="ModifierOrder"/>
<module name="RedundantModifier">
<property name="tokens" value="METHOD_DEF,VARIABLE_DEF"/>
</module>
<module name="AvoidNestedBlocks">
<property name="allowInSwitchCase" value="true"/>
</module>
<module name="EmptyBlock">
<property name="option" value="stmt"/>
</module>
<module name="LeftCurly">
<property name="option" value="eol"/>
<property name="maxLineLength" value="80"/>
<property name="tokens" value="CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF"/>
</module>
<module name="NeedBraces"/>
<module name="RightCurly">
<property name="option" value="alone"/>
<property name="tokens" value="LITERAL_TRY"/>
</module>
<module name="AvoidInlineConditionals"/>
<module name="CovariantEquals"/>
<module name="DefaultComesLast"/>
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="ExplicitInitialization"/>
<module name="FallThrough"/>
<module name="FinalLocalVariable"/>
<module name="HiddenField"/>
<module name="IllegalInstantiation"/>
<module name="IllegalCatch"/>
<module name="InnerAssignment"/>
<module name="MagicNumber">
<property name="ignoreNumbers" value="0, 1"/>
<property name="ignoreAnnotation" value="true"/>
</module>
<module name="MissingSwitchDefault"/>
<module name="ModifiedControlVariable"/>
<module name="MultipleStringLiterals">
<property name="allowedDuplicates" value="3"/>
</module>
<module name="MultipleVariableDeclarations"/>
<module name="NestedIfDepth">
<property name="max" value="1"/>
</module>
<module name="NestedTryDepth">
<property name="max" value="3"/>
</module>
<module name="PackageDeclaration"/>
<module name="ParameterAssignment"/>
<module name="RedundantThrows">
<property name="allowUnchecked" value="true"/>
<property name="allowSubclasses" value="true"/>
</module>
<module name="RequireThis">
<property name="checkFields" value="false"/>
<property name="checkMethods" value="false"/>
</module>
<module name="Regexp">
<property name="format" value="System\.out\.println"/>
<property name="illegalPattern" value="true"/>
</module>
<module name="ReturnCount">
<property name="max" value="3"/>
</module>
<module name="SimplifyBooleanExpression"/>
<module name="SimplifyBooleanReturn"/>
<module name="StringLiteralEquality"/>
<module name="SuperClone"/>
<module name="SuperFinalize"/>
<module name="ArrayTrailingComma"/>
<module name="UnnecessaryParentheses"/>
<module name="DesignForExtension"/>
<module name="FinalClass"/>
<module name="HideUtilityClassConstructor"/>
<module name="InterfaceIsType">
<property name="allowMarkerInterfaces" value="true"/>
</module>
<module name="ThrowsCount">
<property name="max" value="7"/>
</module>
<module name="VisibilityModifier">
<property name="packageAllowed" value="false"/>
<property name="protectedAllowed" value="false"/>
<property name="publicMemberPattern" value="^seriaVersionUID$"/>
</module>
<module name="StrictDuplicateCode">
<property name="min" value="7"/>
<property name="charset" value="UTF-8"/>
</module>
<module name="BooleanExpressionComplexity">
<property name="max" value="7"/>
</module>
<module name="ClassDataAbstractionCoupling">
<property name="max" value="7"/>
</module>
<module name="CyclomaticComplexity">
<property name="severity" value="ignore"/>
</module>
<module name="ArrayTypeStyle">
<property name="javaStyle" value="true"/>
</module>
<module name="FinalParameters"/>
<module name="Indentation">
<property name="basicOffset" value="4"/>
<property name="braceAdjustment" value="0"/>
<property name="caseIndent" value="4"/>
</module>
<module name="NewlineAtEndOfFile"/>
<module name="Translation">
<property name="severity" value="info"/>
</module>
<module name="UncommentedMain">
<property name="excludedClasses" value="^$"/>
</module>
<module name="UpperEll"/>
</module>
</module>首先在本地新建一个XML文件,将上面的代码保存到XML文件中,打开Settings->Tools->CheckStyle

- 测试配置的CheckStyle
