Java服务_CheckStyle简介与使用实例

Java服务_CheckStyle简介与使用实例

CheckStyle是一个帮助java开发人员遵守某些编写规范的工具,它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是细致枯燥的工作中解脱出来。

checkstyle配置有两种配置方式,一种为安装插件,这种方式只能在本地运行代码是生效进行检查;第二种是添加maven依赖配置,这种在任意地方打包运行代码时都需要进行检查,推荐使用这种。Idea如何配置CheckStyle

1.添加checkstyle.xml文件

checkstyle.xml中有各种各样的检测规则,不通过则无法将代码成功打包,每个配置项对应的具体检查项目可以参考Checkstyle全局配置中style_template.xml创建方法

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="FileTabCharacter"/>
<module name="RegexpMultiline">
<property name="format" value="[\r]?\n[\r]?\n[\r]?\n"/>
<property name="message" value="Multiple consecutive blank lines"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="[\r]?\n[\r]?\n\Z"/>
<property name="message" value="Blank line before end of file"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="Preconditions\.checkNotNull"/>
<property name="message" value="Use of checkNotNull"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="^[ \t]*import org.testng.Assert;$"/>
<property name="message" value="org.testng.Assert should only be used with static imports"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="^[ \t]*import org.jetbrains.annotations.NotNull;$"/>
<property name="message" value="Not null is the default for the codebase and should not be annotated"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="^[ \t]*import org.jetbrains.annotations.Nullable;$"/>
<property name="message" value="Use javax.annotation.Nullable instead of org.jetbrains.annotations.Nullable"/>
</module>

<module name="TreeWalker">
<module name="EmptyBlock">
<property name="option" value="text"/>
<property name="tokens" value="
LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_IF,
LITERAL_FOR, LITERAL_TRY, LITERAL_WHILE, INSTANCE_INIT, STATIC_INIT"/>
</module>
<module name="EmptyStatement"/>
<module name="EmptyForInitializerPad"/>
<module name="EmptyForIteratorPad">
<property name="option" value="space"/>
</module>
<module name="MethodParamPad">
<property name="allowLineBreaks" value="true"/>
<property name="option" value="nospace"/>
</module>
<module name="ParenPad"/>
<module name="TypecastParenPad"/>
<module name="LeftCurly">
<property name="option" value="eol"/>
<property name="tokens" value="
LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR,
LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE"/>
</module>
<module name="GenericWhitespace"/>
<module name="WhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>

<module name="UpperEll"/>
<module name="DefaultComesLast"/>
<module name="ArrayTypeStyle"/>
<module name="MultipleVariableDeclarations"/>
<module name="ModifierOrder"/>
<module name="OneStatementPerLine"/>
<module name="StringLiteralEquality"/>
<module name="EqualsHashCode"/>
<module name="InnerAssignment"/>

<module name="MemberName"/>
<module name="LocalVariableName"/>
<module name="LocalFinalVariableName"/>
<module name="TypeName"/>
<module name="PackageName"/>
<module name="ParameterName"/>
<module name="StaticVariableName"/>
<module name="ClassTypeParameterName">
<property name="format" value="^[A-Z][0-9]?$"/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="^[a-zA-Z0-9]+$"/>
</module>

<module name="AvoidStarImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports"/>
<module name="ImportOrder">
<property name="groups" value="*,javax,java"/>
<property name="separated" value="true"/>
<property name="option" value="bottom"/>
<property name="sortStaticImportsAlphabetically" value="true"/>
</module>

<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="ignoreEnhancedForColon" value="false"/>
<property name="tokens" value="
ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN,
BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LE,
LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE,
LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL,
PLUS, PLUS_ASSIGN, QUESTION, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN,
STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>
</module>
</module>
</module>

2.在maven配置文件中添加checkstyle插件依赖

配置插件在项目编译、打包时进行检查:

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
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<configuration>
<!--此处是checkstyle.xml文件放置位置,可根据实际位置进行修改-->
<configLocation>src/checkstyle/checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<skip>false</skip>
<failOnViolation>true</failOnViolation>
<failsOnError>true</failsOnError>
<consoleOutput>true</consoleOutput>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>6.15</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

3.check不通过case日志

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
#16 [compiler 2/2] RUN --mount=type=secret,id=security-signature,target=/opt/local/sign/signer.jks,required=true,mode=0400,uid=1000,gid=1000 --mount=type=bind,from=git,src=/workspace/source,rw=true,target=/source --mount=type=bind,from=cache,src=/workspace/cache,rw=true,target=/root/.m2/repository/ cd /source/ && sh compile-1688468468.sh && artifact_path=`find /source/core/target -type f -maxdepth 1 -name "*.zip"|head -1`; if [ "$artifact_path" != "" ]; then mkdir -p /workspace/result-zip/ ;mv ${artifact_path} /workspace/result-zip//sv-arch-data-asset-drive-20230704.190108.673-9e7918d2.zip; else echo "zip file not found" && exit 1; fi && cp -r /root/.m2/repository/ /workspace/cache && echo 1688468468
#16 15.82 [INFO] Starting audit...
#16 15.82 [ERROR] /source/core/src/main/java/com/jd/bdaa/arch/helper/drive/meta/update/DriveLogicTableHelper.java:74:15: Unused import - com.jd.bdaa.arch.common.util.JsonUtil.toJsonString. [UnusedImports]
#16 15.82 Audit done.
#16 15.82 [INFO] ------------------------------------------------------------------------
#16 15.82 [INFO] Reactor Summary:
#16 15.82 [INFO]
#16 15.82 [INFO] meta-data-center ................................... SUCCESS [ 1.024 s]
#16 15.82 [INFO] common ............................................. SUCCESS [ 1.471 s]
#16 15.82 [INFO] provider ........................................... SUCCESS [ 2.908 s]
#16 15.82 [INFO] core ............................................... FAILURE [ 8.943 s]
#16 15.82 [INFO] ------------------------------------------------------------------------
#16 15.82 [INFO] BUILD FAILURE
#16 15.82 [INFO] ------------------------------------------------------------------------
#16 15.82 [INFO] Total time: 14.806 s (Wall Clock)
#16 15.82 [INFO] Finished at: 2023-07-04T11:01:35+00:00
#16 16.06 [INFO] Final Memory: 57M/3968M
#16 16.06 [INFO] ------------------------------------------------------------------------
#16 16.06 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (validate) on project meta-data-center-core: Failed during checkstyle execution: There is 1 error reported by Checkstyle 6.15 with src/checkstyle/checkstyle.xml ruleset. -> [Help 1]
#16 16.06 [ERROR]
#16 16.06 [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
#16 16.06 [ERROR] Re-run Maven using the -X switch to enable full debug logging.
#16 16.06 [ERROR]
#16 16.06 [ERROR] For more information about the errors and possible solutions, please read the following articles:
#16 16.06 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
#16 16.06 [ERROR]
#16 16.06 [ERROR] After correcting the problems, you can resume the build with the command
#16 16.06 [ERROR] mvn <goals> -rf :meta-data-center-core
#16 16.16 zip file not found
#16 ERROR: process "/bin/sh -c cd /source/ && sh compile-1688468468.sh && artifact_path=`find /source/core/target -type f -maxdepth 1 -name \"*.zip\"|head -1`; if [ \"$artifact_path\" != \"\" ]; then mkdir -p /workspace/result-zip/ ;mv ${artifact_path} /workspace/result-zip//sv-arch-data-asset-drive-20230704.190108.673-9e7918d2.zip; else echo \"zip file not found\" && exit 1; fi && cp -r /root/.m2/repository/ /workspace/cache && echo 1688468468" did not complete successfully: exit code: 1
time="2023-07-04T19:01:36+08:00" level=debug msg="stopping session" spanID=c4ab0fc4fe816012 traceID=2ddd84b5c89aaa61a3455edf7eda9d18