遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样! 您所在的位置:网站首页 java代码规范 遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样!

遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样!

2023-03-09 06:36| 来源: 网络整理| 查看: 265

“你的代码规范是什么?如何保证同一个项目中协同工作的人书写出来的代码格式一致?”

虽然我们知道一些代码规范,比如说“对于重复出现的代码进行封装复用,写好注释等等“,但这些规范我们不可能要求每个开发人员牢牢记住,那么就需要引入一些约定俗成的配置,来帮助我们对代码进行检查,及时发现问题并解决问题。

IDEA配置Code Style

协同工作时,为了保证统一的代码风格,要求我们使用的规范,如果大家都用的是 IDEA,则推荐使用 Google Code Style,推荐阅读Google Java 编程风格中文文档:

https://github.com/fantasticmao/google-java-style-guide-zh_cn

先下载配置文件:

https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml

37035e2497c2eb62faf50f1f79b6107d.jpeg IDEA中code style配置

以上是我的 code 配置,一般缩进就是 2个字符。

格式化代码快捷键,window上快捷键为(Ctrl + Alt + L),mac 上为 ⌥ + ⌘ + L。

Maven项目引入checkstyle检查

由于项目是 Maven 项目,希望在编译的时候自动执行检查,不需要额外手动执行,可以选择在 pom.xml 配置 maven-checkstyle-plugin插件,绑定到 Maven 的生命周期,这样在执行 mvn compile 等命令时自动触发执行检查。

引入依赖

maven 项目 pom 引入 checkstyle 依赖

多模块的 maven 项目,只需要在父模块的 pom.xml 里面配置插件即可,pom.xml 配置如下:

              org.springframework.boot       spring-boot-maven-plugin                 org.apache.maven.plugins       maven-checkstyle-plugin       3.2.0                checkstyle.xml         true         true         false                                  validate           validate                        check                                    checkstyle配置

二、下载 Google-checks.xml,下载地址:

https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml

在项目中的位置如下所示:

fdd7c80e76b27c895a7f51d52f2b5ddb.jpeg checkstyle.xml位置

下面是个人用的 checkstyle.xml 配置(给大家参考):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

执行 checkstyle 检查

执行命令

mvn checkstyle:check //或者 mvn checkstyle:checkstyle

或者点击如下命令:

84e6a9639c2b7bb81758af3547d86c5c.jpeg checkstyle SuppressionFilter

SuppressionFilter 可以抑制以 Treewalker 或 Checker 作为父模块的 Checks。

比如说我们的代码如下所示:

private boolean isContainChinese(String text) {   Pattern p = Pattern       .compile("[\u4E00-\u9FA5!,。()《》“”?:;【】]");   Matcher m = p.matcher(text);   return m.find(); }

被检测出这样一个错误:

StringUtils.java:102:18: 不要使用Unicode转义字符。 [AvoidEscapedUnicodeCharacters]

如何避免错误被检测呢,可以这样设置:

     

同时在 checkstyle.xml 所在目前下新建 suppressions.xml,内容如下:

      引入checkStyle插件

idea 中引入checkStyle插件

如果每次想针对单个文件执行 checkstyle 检查,可以这样做:

1、在IDEA中安装checstyle插件:

e7b189689d377fad437e38f5f5a3cb86.jpeg 安装checkStyle插件

2、新增自定义的checkstyle.xml文件:

7f2af1d12871099e3636e3ba85d98508.jpeg checkStyle插件配置

关于 suppressions 需要设置属性值,其实 checkstyle.xml 文件中已经有默认值了,但还需要设置,不然最后会报错。

6a4fc5e8ae4600d3581329259e69f987.jpeg checkStyle插件配置

最后效果如下:

88fb63997e4fe6dc67d96673c6fa4983.jpeg checkStyle插件配置

3、随便进入一个文件,然后右键选择 checkstyle

3a8d951b1f6c80fdc6004fc68ebb10f4.jpeg 右键执行checkstyle

执行效果如下:

d9155bf66df2ceb9984dbd6cd13bdb3f.jpeg 单个文件checkstyle执行结果 重要检查及应对措施

关于 checkstyle 所有的检查通知,具体有哪些提示信息,参考这篇:

https://github.com/checkstyle/checkstyle/issues/3001

这里贴一点提示信息:

indentation.error.multi=''{0}'' 缩进了{1}个缩进符,应为以下缩进之一:{2}。 indentation.child.error.multi=''{0}'' 子元素进了{1}个缩进符,应为以下缩进之一:{2}。 indentation.error=''{0}'' 缩进了{1}个缩进符,应为{2}个。 indentation.child.error=''{0}'' 子元素缩进了{1}个缩进符,应为{2}个。 comments.indentation.single=注释应与第{0}行代码同样缩进{2}个缩进符,而不是{1}个。 comments.indentation.block=注释应与第{0}行代码同样缩进{2}个缩进符,而不是{1}个。

1、首先是方法注释,如果要求检查每个方法上是否有注释,则添加如下配置(默认自带)。位于 JavadocMethod model下,这点结合项目实际情况,按需决定是否需要保留。

比如说检查结果为:

BaseRedisConfig.java:30:3: 缺少 Javadoc 。 [MissingJavadocMethod]

对应代码为:

@Bean public RedisTemplate redisTemplate(     RedisConnectionFactory redisConnectionFactory) {   RedisSerializer serializer = redisSerializer();   RedisTemplate redisTemplate = new RedisTemplate();   redisTemplate.setConnectionFactory(redisConnectionFactory);   redisTemplate.setKeySerializer(new StringRedisSerializer());   redisTemplate.setValueSerializer(serializer);   redisTemplate.setHashKeySerializer(new StringRedisSerializer());   redisTemplate.setHashValueSerializer(serializer);   redisTemplate.afterPropertiesSet();   return redisTemplate; }

提示我们上述方法没有注释,如果想避开该检查,则删除如下配置。

                    

如果要求增加方法注释,则需要注意如下事项:

要包含方法说明

要包含参数列表

要包含返回值类型

要严格注意注释的缩进和星号数量

2、类注释

代码如下所示:

/**  * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date 2022/9/14 9:07 下午  * @description  */ @Configuration public class SpringDocConfig{    }

检查后提示如下信息:

SpringDocConfig.java:10: 缺少摘要javadoc。 [SummaryJavadoc]

归根结底是因为类文件没有描述信息,@description 是我们自定义的标签,并不会 checkStyle 所认可,默认类文件描述信息要在第一行,且必须要有结尾标识,即添加英文句号结尾,如下所示:

/**  * 测试.  *   * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date 2022/9/14 9:07 下午  */

这就要求我们修改类文件注释模版,如下所示:

/**  *   *  * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date ${DATE} ${TIME}   */

3、类注释缩进符不对

代码如下所示:

/**  * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date 2022/9/14 9:07 下午  * @description  */ @Configuration public class SpringDocConfig{    }

检查结果为:

SpringDocConfig.java:12: Javadoc 缩进级别错误,应为 4 个缩进符。 [JavadocTagContinuationIndentation] SpringDocConfig.java:13: Javadoc 缩进级别错误,应为 4 个缩进符。 [JavadocTagContinuationIndentation]

如何解决呢?最简单的方法就是去除该配置,除此之外,还需要修改类文件注释模版,如下是我自定义的模版:

/**  * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date ${DATE} ${TIME}  * @description   */

但仍然报错,经过测试发现,如果改成这样就不会检查报错了。

/*  * @author hresh  * @博客 https://juejin.cn/user/2664871918047063  * @网站 https://www.hreshhao.com/  * @date ${DATE} ${TIME}  * @description   */

经过查询 /* /和 /* */的区别,发现后者是说明注释,可以添加到 javadoc 中,后续可以生成 HTML 格式的代码报告。

最佳解决方案为:

  

如何添加 property,以及 name 值是什么,这点需要参考官方文档:

https://checkstyle.org/config_javadoc.html#JavadocTagContinuationIndentation

4、方法参数名称

代码示例:

public static  PageResult ok(IPage iPage)

检查报错

Parameter name 'iPage' must match pattern '^[a-z]([a-z0-9][a-zA-Z0-9]*)?$'. [ParameterName]

5、方法注释

代码示例:

/**    * 驼峰转下划线    *    * @param name    * @return    */ public static String camelToUnderscore(String name)

上述代码会有两个报错:

StringUtils.java:15: Javadoc的第一句缺少一个结束时期。 [SummaryJavadoc] StringUtils.java:18: @标签应有非空说明。 [NonEmptyAtclauseDescription]

解决方案:

/**    * 驼峰转下划线.    *    * @param name 字符串    * @return    */ public static String camelToUnderscore(String name) 实际应用

当我们使用 orm-generator 脚手架生成模版代码,并复制到项目中后,格式可能存在问题,比如这种错误:

d45013411b44f5330736090919f8e5fa.jpeg checkstyle检测错误 参考文献

Google Java 代码规范[1]

idea java项目引入checkstyle检查[2]

Maven配置checkstyle,SpotBugs以及Jacoco插件[3]

参考资料

[1]

https://leer.moe/2017/09/18/google-java-style-guide/: https://link.juejin.cn?target=https%3A%2F%2Fleer.moe%2F2017%2F09%2F18%2Fgoogle-java-style-guide%2F

[2]

https://www.cnblogs.com/songchaolin/p/12714215.html: https://link.juejin.cn?target=https%3A%2F%2Fwww.cnblogs.com%2Fsongchaolin%2Fp%2F12714215.html

[3]

https://juejin.cn/post/6905364481413480461#heading-0: https://juejin.cn/post/6905364481413480461#heading-0

作者:hresh

来源:juejin.cn/post/7178683426852044858

推荐

Java面试题宝典

技术内卷群,一起来学习!!

125beeec3d9ef482f481f28d4df7612d.jpeg

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有