eclipse和idea都有对应的插件,找到插件安装界面。搜索checkstyle,点击安装后,重启IDE即可。(网上有很多安装教程,就不重复制造轮子了)
在checkstyle的设置界面导入我们自己写的配置文件。写了两个配置文件,都是基本符合阿里巴巴规范的。第一个是比较精简的(不检测魔术数字,不检测方法的doc等)。第二个是完整的,检测规范较多,有些过于严苛了,个人使用了第一个规范配置。
<module name="Checker">
<module name="NewlineAtEndOfFile"/>
<module name="FileLength">
<property name="max" value="1500"/>
module>
<module name="TreeWalker">
<module name="IllegalImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports" />
<module name="JavadocType">
<property name="allowUnknownTags" value="true"/>
<message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/>
module>
<module name="LocalFinalVariableName" />
<module name="LocalVariableName" />
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
module>
<module name="StaticVariableName" />
<module name="TypeName">
<property name="severity" value="warning"/>
<message key="name.invalidPattern" value="名称 ''{0}'' 要符合 ''{1}''格式."/>
module>
<module name="MemberName" />
<module name="MethodName" />
<module name="ParameterName " />
<module name="ConstantName" />
<module name="ArrayTypeStyle"/>
<module name="UpperEll"/>
<module name="LineLength">
<property name="max" value="140" />
module>
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF" />
<property name="max" value="50" />
module>
<module name="ParameterNumber">
<property name="max" value="5" />
<property name="ignoreOverriddenMethods" value="true"/>
<property name="tokens" value="METHOD_DEF" />
module>
<module name="MethodParamPad" />
<module name="TypecastParenPad" />
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/>
<module name="ModifierOrder"/>
<module name="RedundantModifier"/>
<module name="AvoidNestedBlocks"/>
<module name="EmptyBlock"/>
<module name="LeftCurly"/>
<module name="NeedBraces"/>
<module name="RightCurly"/>
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="HiddenField">
<property name="tokens" value="VARIABLE_DEF"/>
module>
<module name="InnerAssignment"/>
<module name="MissingSwitchDefault"/>
<module name="SimplifyBooleanExpression"/>
<module name="SimplifyBooleanReturn"/>
<module name="FinalClass"/>
<module name="InterfaceIsType"/>
<module name="VisibilityModifier">
<property name="packageAllowed" value="true"/>
<property name="protectedAllowed" value="true"/>
module>
<module name="StringLiteralEquality"/>
<module name="NestedForDepth">
<property name="max" value="2"/>
module>
<module name="NestedIfDepth">
<property name="max" value="3"/>
module>
<module name="UncommentedMain">
<property name="excludedClasses" value=".*[Application,Test]$"/>
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="NestedTryDepth ">
<property name="max" value="3"/>
module>
<module name="SuperClone" />
<module name="SuperFinalize" />
module>
module>
<module name="Checker">
<module name="NewlineAtEndOfFile"/>
<module name="FileLength">
<property name="max" value="1500"/>
module>
<module name="TreeWalker">
<module name="AvoidStarImport">
<property name="excludes" value="java.io,java.net,java.lang.Math"/>
<property name="allowClassImports" value="false"/>
<property name="allowStaticMemberImports" value="true"/>
module>
<module name="IllegalImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports" />
<module name="JavadocType">
<property name="allowUnknownTags" value="true"/>
<message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/>
module>
<module name="JavadocMethod">
<property name="tokens" value="METHOD_DEF" />
<property name="allowMissingPropertyJavadoc" value="true"/>
<message key="javadoc.missing" value="方法注释:缺少Javadoc注释。"/>
module>
<module name="LocalFinalVariableName" />
<module name="LocalVariableName" />
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
module>
<module name="StaticVariableName" />
<module name="TypeName">
<property name="severity" value="warning"/>
<message key="name.invalidPattern" value="名称 ''{0}'' 要符合 ''{1}''格式."/>
module>
<module name="MemberName" />
<module name="MethodName" />
<module name="ParameterName " />
<module name="ConstantName" />
<module name="ArrayTypeStyle"/>
<module name="UpperEll"/>
<module name="LineLength">
<property name="max" value="120" />
module>
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF" />
<property name="max" value="50" />
module>
<module name="ParameterNumber">
<property name="max" value="5" />
<property name="ignoreOverriddenMethods" value="true"/>
<property name="tokens" value="METHOD_DEF" />
module>
<module name="MethodParamPad" />
<module name="TypecastParenPad" />
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/>
<module name="ModifierOrder"/>
<module name="RedundantModifier"/>
<module name="AvoidNestedBlocks"/>
<module name="EmptyBlock"/>
<module name="LeftCurly"/>
<module name="NeedBraces"/>
<module name="RightCurly"/>
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="HiddenField">
<property name="tokens" value="VARIABLE_DEF"/>
module>
<module name="IllegalInstantiation"/>
<module name="InnerAssignment"/>
<module name="MagicNumber">
<property name="ignoreNumbers" value="0, 1"/>
<property name="ignoreAnnotation" value="true"/>
module>
<module name="MissingSwitchDefault"/>
<module name="SimplifyBooleanExpression"/>
<module name="SimplifyBooleanReturn"/>
<module name="FinalClass"/>
<module name="HideUtilityClassConstructor"/>
<module name="InterfaceIsType"/>
<module name="VisibilityModifier">
<property name="packageAllowed" value="true"/>
<property name="protectedAllowed" value="true"/>
module>
<module name="StringLiteralEquality"/>
<module name="NestedForDepth">
<property name="max" value="2"/>
module>
<module name="NestedIfDepth">
<property name="max" value="3"/>
module>
<module name="UncommentedMain">
<property name="excludedClasses" value=".*Application$"/>
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="NestedTryDepth ">
<property name="max" value="3"/>
module>
<module name="SuperClone" />
<module name="SuperFinalize" />
module>
module>