CheckStyle, 强制遵循编码规范,集成IDEA配置

如何将CheckStyle引入到maven构建中

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>checkstyle</id>
            <phase>validate</phase>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <failOnViolation>true</failOnViolation>
            </configuration>
        </execution>
    </executions>
</plugin>

我们定义了在maven lifecycle的validate阶段执行check task,并且如果发现有违反标准的情况就会fail当前的build。

maven-checkstyle-plugin内置了4种规范.

config/sun_checks.xml
config/maven_checks.xml
config/turbine_checks.xml
config/avalon_checks.xml

其中sun_checks.xml为默认值。如果想要使用其他三种规范,则只需配置configuration。下面是使用maven_checks.xml的示例。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <configLocation>config/maven_checks.xml</configLocation>
    </configuration>
    <executions>
        <execution>
            <id>checkstyle</id>
            <phase>validate</phase>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <failOnViolation>true</failOnViolation>
            </configuration>
        </execution>
    </executions>
</plugin>

自定义规范文件
下面是一个checkstyle规范文件

  
  
  
  
  
<module name="Checker">     
      
    <property name="charset" value="UTF-8"/>     
    <property name="severity" value="warning"/>  
      
       
       
    <module name="FileLength">           
     <property name="max" value="2500"/>          
  module>    
    
     
     
      
  <module name="TreeWalker">  
      
                     
        
    <module name="AvoidStarImport"/>    
      
        
    <module name="IllegalImport"/>     
      
        
    <module name="RedundantImport"/>    
      
        
    <module name="UnusedImports"/>  
      
      
      
      
    <module name="JavadocType">    
        <property name="authorFormat" value="\S"/>    
      <property name="scope" value="protected"/>          
      <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="LeftCurly">   
        <property name="option" value="nl"/>  
    module>  
       
        
    <module name="NeedBraces"/>    
      
        
    <module name="RightCurly">      
        <property name="option" value="alone"/>     
    module>  
          
       
    <module name="EqualsHashCode"/>  
          
        
    <module name="IllegalInstantiation">    
        <property name="classes" value="java.lang.Boolean"/>    
    module>  
      
      
      
    <module name="LocalFinalVariableName"/>  
      
       
    <module name="LocalVariableName"/>  
      
      
    <module name="StaticVariableName">  
        <property name="format" value="(^[A-Z0-9_]{0,19}$)"/>      
    module>    
      
      
    <module name="PackageName" >  
        <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>  
    module>   
       
      
    <module name="TypeName">    
        <property name="format" value="(^[A-Z][a-zA-Z0-9]{0,19}$)"/>    
    module>  
      
        
    <module name="MethodName">            
      <property name="format" value="(^[a-z][a-zA-Z0-9]{0,19}$)"/>           
    module>   
      
      
    <module name="MemberName">    
        <property name="format" value="(^[a-z][a-z0-9][a-zA-Z0-9]{0,19}$)"/>           
    module>  
      
      
    <module name="ParameterName">  
        <property name="format" value="(^[a-z][a-zA-Z0-9_]{0,19}$)"/>           
    module>  
      
      
    <module name="ConstantName">   
        <property name="format" value="(^[A-Z0-9_]{0,19}$)"/>        
    module>  
      
      
    <module name="Indentation">          
    module>  
      
       
      
         
    <module name="SimplifyBooleanExpression"/>  
      
        
    <module name="SimplifyBooleanReturn"/>    
      
        
    <module name="FinalClass"/>  
      
        
      
        
    <module name="VisibilityModifier"/>   
      
      
    <module name="MultipleVariableDeclarations">         
    module>  
      
         
    <module name="ArrayTypeStyle">   
    module>  
      
        
      
        
    <module name="TodoComment"/>    
      
        
    <module name="UpperEll"/>  
      
       
    <module name="MissingSwitchDefault"/>   
      
      
    <module name="FallThrough"/>    
      
          
    <module name="ParameterNumber">        
      <property name="max" value="5"/>                
    module>  
      
          
    <module name="LineLength">    
      <property name="max" value="200"/>         
    module>    
      
       
    <module name="MethodLength">    
      <property name="max" value="300"/>                   
    module>          
      
        
    <module name="ModifierOrder">            
    module>        
      
      
    <module name="RedundantModifier">         
    module>  
      
         
    <module name="StringLiteralEquality">            
    module>   
      
      
    <module name="NestedIfDepth">          
      <property name="max" value="3"/>           
    module>    
      
      
    <module name="NestedTryDepth">    
      <property name="max" value="2"/>           
    module>    
          
         
    <module name="ReturnCount">          
      <property name="max" value="5"/>    
      <property name="format" value="^$"/>            
    module>                    
    
  module>  
    
module>

如果想启用自定义的规范文件,则依旧是修改configuration,指向你的文件地址。

 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.10</version>
            <configuration>
                <configLocation>${basedir}/src/config/custom_checkstyle.xml</configLocation>
            </configuration>
            <executions>
                <execution>
                    <id>checkstyle</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <failOnViolation>true</failOnViolation>
                    </configuration>
                </execution>
            </executions>
        </plugin>

运行checkstyle检查

mvn checkstyle:checkstyle

checkstye的详细结果信息被存放在target/checkstyle-result.xml中

跳过对指定文件的某些检查
如果对于指定文件检查出了一些问题,但是你想忽略它,则可以使用suppression。

例如在上述例子中有一个checkstyle error是说某行超过了100字符。如果我们不想修复这个错误怎么办那?可以将其suppress掉。

方法是建立一个checkstyle-suppressions.xml文件。其中加入下述内容

checkstyle-suppressions.xml




<suppressions>
    <suppress checks="LineLengthCheck"
              files="SessionMessageSource.java"
              />
suppressions>

然后配置maven-checkstyel-plugin设置suppressionsLocation。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <configLocation>${basedir}/src/config/custom_checkstyle.xml</configLocation>
        <suppressionsLocation>${basedir}/src/config/checkstyle-suppressions.xml</suppressionsLocation>
    </configuration>
    <executions>
        <execution>
            <id>checkstyle</id>
            <phase>validate</phase>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <failOnViolation>true</failOnViolation>
            </configuration>
        </execution>
    </executions>
</plugin>

CheckStyle集成Idea

首先下载插件
CheckStyle, 强制遵循编码规范,集成IDEA配置_第1张图片
需要在本地配置你的CheckStyle.xml
然后将配置文件加载到插件

CheckStyle, 强制遵循编码规范,集成IDEA配置_第2张图片
CheckStyle, 强制遵循编码规范,集成IDEA配置_第3张图片
CheckStyle, 强制遵循编码规范,集成IDEA配置_第4张图片

检查方式

CheckStyle, 强制遵循编码规范,集成IDEA配置_第5张图片

你可能感兴趣的:(java,maven)