遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样! | 您所在的位置:网站首页 › java代码规范 › 遵循 Google Java 规范并引入 Checkstyle 检查,代码写的像诗一样! |
“你的代码规范是什么?如何保证同一个项目中协同工作的人书写出来的代码格式一致?” 虽然我们知道一些代码规范,比如说“对于重复出现的代码进行封装复用,写好注释等等“,但这些规范我们不可能要求每个开发人员牢牢记住,那么就需要引入一些约定俗成的配置,来帮助我们对代码进行检查,及时发现问题并解决问题。 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 SuppressionFilterSuppressionFilter 可以抑制以 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检测错误 参考文献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面试题宝典 技术内卷群,一起来学习!! PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧! |
CopyRight 2018-2019 实验室设备网 版权所有 |