如何将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.xml
然后将配置文件加载到插件
检查方式