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

您所在的位置:网站首页 idea格式化代码快捷键无效 遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样!

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

2023-03-10 18:45| 来源: 网络整理| 查看: 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

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

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

checkstyle.xml位置

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

执行 checkstyle 检查

执行命令

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

或者点击如下命令:

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插件:

安装checkStyle插件

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

checkStyle插件配置

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

checkStyle插件配置

最后效果如下:

checkStyle插件配置

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

右键执行checkstyle

执行效果如下:

单个文件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 脚手架生成模版代码,并复制到项目中后,格式可能存在问题,比如这种错误:

checkstyle检测错误

来源:https://mp.weixin.qq.com/s/UYRVHzj4P5QI4Zl3yVcnLQ


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3