Maven 代码插件

代码规范检查工具 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">
<!-- \s matches whitespace character, $ matches end of line. -->
<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
<!--     SpotBugs 插件      -->
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>3.1.12</version>
<dependencies>
<!-- 此处的依赖用于指定 spotbugs 的版本,不引入该依赖,插件默认会有一个提供一个版本 -->
<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 的具体配置,以及相关参数也可点击这里


Maven 代码插件
http://wszzf.top/2021/11/01/Maven 代码插件/
作者
Greek
发布于
2021年11月1日
许可协议