代码规范检查工具 CheckStyle
功能
checkstyle 插件能帮助我们规范代码行为,尽可能地检查代码的坏味道。
配置
checkStyle 插件配置很简单,主要是分两步:引入插件,编写代码规则 xml。
引入插件的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.1.2</version> <configuration> <configLocation>${basedir}/src/main/resources/checkstyle.xml</configLocation> <includeTestSourceDirectory>false</includeTestSourceDirectory> <enableRulesSummary>false</enableRulesSummary> </configuration> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
|
引入插件的坐标,在 中配置插件的一些属性, configLocation
配置了要使用的规则文件位置,如若不配置则默认使用 sun 公司提供的代码规范配置。includeTestSourceDirectory
是否检查测试代码规范 ,enableRulesSummary
是否开启规则摘要等等,详细的配置信息请点击
在标签中将 checkstyle 插件的 check 目标绑定到 default 生命周期的 compile 阶段。当使用 mvn compile
编译代码时,checkStyle 便会执行 check 目标,或者手动执行 mvn checkstyle:check
编写代码规则 xml:
代码规则已经有现成的模板,因此可以直接使用现成的模板,或者根据已有的模板进行修改。比如 sun 公司的代码规范,以及 google 的代码规范。以下是个人开发中经常使用的代码规则,可根据需要修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.1//EN" "http://www.puppycrawl.com/dtds/configuration_1_1.dtd"> <module name="Checker"> <property name="localeLanguage" value="en"/> <module name="NewlineAtEndOfFile"> <property name="lineSeparator" value="lf"/> </module> <module name="FileTabCharacter"> <property name="fileExtensions" value="java,xml"/> </module> <module name="RegexpSingleline"> <property name="format" value="\s+$"/> <property name="message" value="Line has trailing spaces."/> </module> <module name="TreeWalker"> <module name="IllegalImport"/> <module name="RedundantImport"/> <module name="UnusedImports"/> <module name="NeedBraces"/> <module name="JavadocMethod"> <property name="scope" value="public"/> </module> <module name="ModifierOrder"/> <module name="RedundantModifier"/> <module name="UpperEll"/> <module name="LeftCurly"/> <module name="NeedBraces"/> <module name="RightCurly"/> <module name="GenericWhitespace"/> <module name="WhitespaceAfter"/> <module name="NoWhitespaceBefore"/> </module> </module>
|
需要注意的是,规则文件的目录名称需要与插件配置的地址一致,否则插件无法使用自己编写的规则。
代码缺陷检查工具 SpotBugs
功能
SpotBugs 的前身是 FindBugs,从字面意思很好理解就是帮我们的代码找 bug,当然这个 bug 指的是代码层面的,而不是业务上的。特别说明,SpotBugs 检查的是编译后的字节码文件,而非源代码。
配置
SpotBugs 的配置也很简单:引入插件依赖,并在插件中做配置即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> <version>3.1.12</version> <dependencies> <dependency> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs</artifactId> <version>4.4.2</version> </dependency> </dependencies> <executions> <execution> <id>spotbugs</id> <phase>verify</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
|
由于 SpotBugs 是检查字节码文件,因此需要将 SpotBugs 的目标绑定到 compile 之后的阶段,上述配置将 SpotBugs 绑定到 default 生命周期的 verify 阶段,亦可以直接使用命令 mvn spotbugs:check
执行目标。
对于一些不需要 SpotBugs 检查的方法或者类需要在 pom 中引入如下依赖:
1 2 3 4 5 6 7
| <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> <version>3.0.1</version> </dependency>
|
引入依赖后,在对应的类或者方法上添加 @SuppressFBWarnings("EI_EXPOSE_REP")
其中括号中替换为对应的错误类型,更多关于 SpotBugs 的配置信息请点击
测试覆盖率报告插件 Jacoco
功能
给单元测试生成测试覆盖率报告,覆盖率报告可以详细的查看测试覆盖到的地方。
配置
给 Junit 测试生成测试报告配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <executions> <execution> <id>default-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>default-report</id> <phase>verify</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>default-check</id> <goals> <goal>check</goal> </goals> <configuration> <rules> <rule> <element>BUNDLE</element> <limits> <limit> <counter>COMPLEXITY</counter> <value>COVEREDRATIO</value> <minimum>0.60</minimum> </limit> </limits> </rule> </rules> </configuration> </execution> </executions> </plugin>
|
配值 Jacoco 的 report 目标绑定到 verify 阶段,当运行 mvn verify
命令时,会生成代码测试覆盖率报告。
Jacoco 排除文件的配置也需要注意:当我们既需要在生成报告中排除,又需要在检查测试覆盖率中排除时,可以在插件依赖下声明如下,configuration 与插件的 executions
在同一级。
1 2 3 4 5
| <configuration> <excludes> <exclude>com/greek/shop/entity/*</exclude> </excludes> </configuration>
|
仅需要在某些目标执行是过滤文件,则在对应目标的配置中加入上面的代码。例如要在 report 目标中排除文件,则要在 report 对应的 execution
里面添加上面的配置。
官方文档中针对单元测试和集成测试有不同的配置方法请点击查看,关于 report 的具体配置,以及相关参数也可点击这里