JAVA静态代码审查之checkstyle

Posted 王云十三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA静态代码审查之checkstyle相关的知识,希望对你有一定的参考价值。

  技术总监来巡查,刚巧前段时间遇到了一个问题还没解决,就拉着大牛开问。结果,问题是解决了,还附带了另一个问题,或是要求出来,没啥技术含量,但是很麻烦的一个东西:代码格式。

  之前我写代码,因为屏幕比较小,所以就尽量一行写的不写两行,每一行都是一个逻辑片段,后期审阅时超级方便,但“这只是我自己的习惯而已”,可我觉着这么写,超级爽啊!但是,但是,但是,技术总监严厉要求,要按照公司自己的一套标准来写。

  后来我自己也想了下,我这么写的原因是,自己开发的笔记本的屏幕比较小,代码看不全所以才这么来的,可是,别人,特别是后期的运维人员在进行操作时,他们的机器情况跟我的完全不一样啊,万一他们的是90英寸超级大屏呢?想象一下,我的代码就漂浮在屏幕的最上边,想一条虫子,难看至极。

  哎,好吧,咱哥们还是按照公司的要求来吧,万一这个项目的接盘侠是个武力至上的人,那就等着被提刀满街追了。

  废话说了好多,就是心里不爽吐吐槽,现在,把一套checkstyle标准贴出来,以备后来装逼用。

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
  3 
  4 <!--
  5     This configuration file was written by the eclipse-cs plugin configuration editor
  6 -->
  7 <!--
  8     Checkstyle-Configuration: Vastio Checks
  9     Description: none
 10 -->
 11 <module name="Checker">
 12   <property name="severity" value="warning"/>
 13   <module name="TreeWalker">
 14     <module name="JavadocMethod">
 15       <property name="severity" value="ignore"/>
 16       <property name="suppressLoadErrors" value="true"/>
 17       <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
 18     </module>
 19     <module name="JavadocType">
 20       <property name="severity" value="ignore"/>
 21       <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
 22     </module>
 23     <module name="JavadocVariable">
 24       <property name="severity" value="ignore"/>
 25       <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
 26     </module>
 27     <module name="ConstantName">
 28       <property name="applyToPrivate" value="false"/>
 29     </module>
 30     <module name="LocalFinalVariableName"/>
 31     <module name="LocalVariableName"/>
 32     <module name="MemberName"/>
 33     <module name="MethodName"/>
 34     <module name="PackageName"/>
 35     <module name="ParameterName"/>
 36     <module name="StaticVariableName"/>
 37     <module name="TypeName"/>
 38     <module name="AvoidStarImport"/>
 39     <module name="IllegalImport"/>
 40     <module name="RedundantImport"/>
 41     <module name="UnusedImports"/>
 42     <module name="MethodLength"/>
 43     <module name="ParameterNumber"/>
 44     <module name="LineLength">
 45       <property name="max" value="160"/>
 46       <property name="tabWidth" value="4"/>
 47     </module>
 48     <module name="EmptyForIteratorPad"/>
 49     <module name="MethodParamPad"/>
 50     <module name="NoWhitespaceAfter"/>
 51     <module name="NoWhitespaceBefore"/>
 52     <module name="OperatorWrap"/>
 53     <module name="ParenPad"/>
 54     <module name="TypecastParenPad"/>
 55     <module name="WhitespaceAfter"/>
 56     <module name="WhitespaceAround">
 57       <property name="tokens" value="BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND,WILDCARD_TYPE"/>
 58     </module>
 59     <module name="ModifierOrder"/>
 60     <module name="RedundantModifier"/>
 61     <module name="AvoidNestedBlocks"/>
 62     <module name="EmptyBlock"/>
 63     <module name="LeftCurly"/>
 64     <module name="NeedBraces"/>
 65     <module name="RightCurly"/>
 66     <module name="AvoidInlineConditionals"/>
 67     <module name="EmptyStatement"/>
 68     <module name="EqualsHashCode"/>
 69     <module name="HiddenField">
 70       <property name="ignoreConstructorParameter" value="true"/>
 71       <property name="ignoreSetter" value="true"/>
 72     </module>
 73     <module name="IllegalInstantiation">
 74       <property name="classes" value="java.lang.Boolean"/>
 75     </module>
 76     <module name="InnerAssignment"/>
 77     <module name="MissingSwitchDefault"/>
 78     <module name="RedundantThrows">
 79       <property name="severity" value="ignore"/>
 80       <property name="suppressLoadErrors" value="true"/>
 81       <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
 82     </module>
 83     <module name="SimplifyBooleanExpression"/>
 84     <module name="SimplifyBooleanReturn"/>
 85     <module name="FinalClass"/>
 86     <module name="HideUtilityClassConstructor"/>
 87     <module name="InterfaceIsType"/>
 88     <module name="VisibilityModifier"/>
 89     <module name="ArrayTypeStyle"/>
 90     <module name="TodoComment"/>
 91     <module name="UpperEll"/>
 92     <module name="OperatorWrap"/>
 93   </module>
 94   <module name="JavadocPackage">
 95     <property name="severity" value="ignore"/>
 96     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
 97   </module>
 98   <module name="NewlineAtEndOfFile"/>
 99   <module name="Translation"/>
100   <module name="FileLength"/>
101   <module name="FileTabCharacter">
102     <property name="severity" value="ignore"/>
103     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
104   </module>
105   <module name="RegexpSingleline">
106     <property name="format" value="\s+$"/>
107     <property name="message" value="Line has trailing spaces."/>
108   </module>
109 </module>

  具体的代码含义懒得分析了,直接拿来用就ok了。

附上用法:

  Eclipse 或者 IntelliJ IDEA 等 IDE 中有对应的 Plugin。可搜索相应的 Plugin Market 安装。

  以 IntelliJ IDEA 为例。

  菜单选择 File>Setting,Plugins 选项卡中搜索 checkstyle 与 findbugs 进行安装。安装可能需要FQ,可也去IDEA官网的插件页面里去下载,然后手动添加到IDEA中去。

  菜单选择 File>Setting, Other Settings 中,会有安装后的Plugin的选项。

  CheckStyle 选项中新增 Configuration File, 选择 "Use a local CheckStyle file", File: 中选择本项目中的 checkstyle.xml 文件,Description 随意命名,比如 "Vastio Java Style"。

  将新增加的 Configuration File 设为 Active。

  最后,确认一下 Setting 中的 Editor:Inspections:CheckStyle 中的 Real-time scan 是打开的。

以上是关于JAVA静态代码审查之checkstyle的主要内容,如果未能解决你的问题,请参考以下文章

代码静态分析工具--PMD,Findbugs,CheckStyle

Sonar 集成Jenkins进行代码审查

配置sonarjenkins进行持续审查

配置sonar和jenkins进行代码审查

maven配置checkstyle插件对代码规范进行静态检查

gitlab+jenkins+maven+docker持续集成——sonarqube及sonarscanner代码审查