代码扫描与格式化实践

现在的项目往往都是多人协作完成,往往会出现代码格式不统一,低级bug增多,也会造成开发不愿意修改别人的代码。

为了最大程度做到代码低级bug少,代码格式统一,易读易改,需要引入代码扫描与格式化工具。

选型

常用的代码扫描工具有findbugs,pmd等。

常用的代码格式化工具有checkstyle,spotless等。

本次实践的编码语言为java,编译工具为maven。

因为长时间使用p3c作为代码规范的工具,那么扫描工具可以选择maven-pmd,格式化工具则可以选择maven-spotless,全部采用maven插件的方式运行,并绑定编译生命周期。

在服务器上自动化编译代码时,扫描结果通过邮件通知到committer,格式化后的文件则自动提交到对应的分支。

在IDE上,我们统一使用idea作为开发工具。

在开发的电脑上可以安装p3c插件和eclipse format插件,因为很难保证所有开发的电脑的IDE配置是一致的,所以这一块不做硬性要求,能配最好。

我们只要保证CICD可以正确扫描代码和格式代码即可满足我们的要求。

maven pmd p3c

两个version全部用最新的版本即可。

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
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven-pmd-plugin.version}</version>
<configuration>
<rulesets>
<ruleset>rulesets/java/ali-comment.xml</ruleset>
<ruleset>rulesets/java/ali-concurrent.xml</ruleset>
<ruleset>rulesets/java/ali-constant.xml</ruleset>
<ruleset>rulesets/java/ali-exception.xml</ruleset>
<ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
<ruleset>rulesets/java/ali-naming.xml</ruleset>
<ruleset>rulesets/java/ali-oop.xml</ruleset>
<ruleset>rulesets/java/ali-orm.xml</ruleset>
<ruleset>rulesets/java/ali-other.xml</ruleset>
<ruleset>rulesets/java/ali-set.xml</ruleset>
</rulesets>
<printFailingErrors>true</printFailingErrors>
</configuration>
<dependencies>
<dependency>
<groupId>com.alibaba.p3c</groupId>
<artifactId>p3c-pmd</artifactId>
<version>${p3c-pmd.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>aggregate-pmd</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>

maven spotless p3c

插件版本依然选择最新的版本,java的eclipse format文件从p3c的github上下载后,放到工程下,并修改配置。

spotless maven的一些配置见spotless github官网。

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
41
42
43
44
45
46
47
48
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<formats>
<format>
<includes>
<include>*.java</include>
</includes>
<trimTrailingWhitespace/>
<endWithNewline/>
<indent>
<tabs>true</tabs>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<java>
<includes>
<include>src/main/java/**/*.java</include>
<include>src/test/java/**/*.java</include>
</includes>
<removeUnusedImports/>
<eclipse>
<version>4.13.0</version>
<file>${maven.multiModuleProjectDirectory}/src/main/resources/ycmj_eclipse_formatter.xml</file>
</eclipse>
</java>
<pom>
<includes>
<include>pom.xml</include>
</includes>
<sortPom>
<expandEmptyElements>false</expandEmptyElements>
<nrOfIndentSpace>4</nrOfIndentSpace>
</sortPom>
</pom>
</configuration>
<executions>
<execution>
<goals>
<goal>apply</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>

idea p3c配置

IDEA插件使用文档

idea eclipse format配置

代码质量 - 统一风格:统一代码格式化详解

搭配save action使用更香

效率提升-idea插件(save action)