Java代码格式化规范实践总结
目标说明
统一良好的代码格式规范可以有效提升开发团队之间的「协作效率」,如果不同的开发团队或者开发人员采用不同的代码格式规范,那么每次Format代码都会导致大量的变化,在Code Review及Merge代码时会带来很多的干扰项。因此制定本代码规范希望达成以下目标:
- 统一Java代码格式规范,确保团队成员间「代码风格一致」;
- 保证Format代码时不会引入格式上的干扰;
- 提升团队协作效率、Code Review效率;
怎么实施
在Java代码规范方面目前Google Java Code Style在业界使用得比较广泛。它的优点如下:
- 业界比较通用;
- 有比较完善的自动化校验工具及checkstyle配置文档;
为了满足「代码的美感」,借鉴其他公司的定制经验,根据马蜂窝的内部需求,我们进行了一些小的定制,具体变化如下:
修改intellij-java-google-style.xml中的内容:
INDENT_SIZE 2 4 行缩进 TAB_SIZE 2 4 TAB缩进 CONTINUATION_INDENT_SIZE 4 8 换行缩进 RIGHT_MARGIN 100 120 单行的长度 JD_PRESERVE_LINE_FEEDS 无 true 注释中保留手动的换行 KEEP_LINE_BREAKS 无 true Java代码中,保留手动的换行
- 修改intellij-java-google-style.xml文件下载:
intellij-java-google-style.xml
使用方式
使用代码规范主要干两件事:
- 代码格式化,可以实现自动化的代码格式化操作;
- 代码校验,代码格式的自动校验;
代码格式化
1)、先下载上面的「intellij-java-google-style.xml」文件保存至本地目录;
2)、设置配置文件,路径:IntelliJ IDEA → Preference → Editor → Code Style,如下图所示:
3)、选择intellij-java-google-style.xml文件所在位置,选择OK
配置完code style后,在Mac下使用IntelliJ IDEA进行代码格式化,快捷键为「option+command+L」。
代码自动校验
- 有了统一风格的代码格式,只是从基本格式上约定了大家的代码样式,而关于Java代码的编写规范由于每个人的习惯、代码编写经验都不相同,因此写出来的代码在类的命名规范、设计方面也会有很多的不同,而这也会影响到代码的整体质量。
- 为了更好地规范大家的编程行为,可以通过IntelliJ IDEA插件的方式,实现代码的自动化检查节省人力(PS:蚂蚁、快手、摩拜等公司在团队开发过程中都在使用CheckStyle进行自动化代码检查)。
- 参考目前市面上最有影响力的Java编程规范当属阿里推出的《阿里巴巴Java开发手册》,目前该手册已经成为很多团队的开发标准。下载链接:阿里巴巴Java开发手册终极版v1.3.0.pdf
- 比较方便的是基于该手册已经开发了IntelliJ IDEA插件,可以在写代码时实时对常见的代码书写错误或者可能留坑的地方进行提示,非常有用。
接下来通过截图的方式演示如何使用「Alibaba Java Code Guidelines插件」进行代码校验:
安装Alibaba Java Code Guidelines插件
可以通过直接通过Jetbrians官方仓库安装,由于网络关系,这里选择手工安装方式
1)、下载最新版本「Alibaba Java Coding Guidelines插件」
http://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines/versions
2)、IntelliJ IDEA → Preference→Plugins,选择「install Plugin from Disk...」
完成后,选择重启IntelliJ IDEA。
3)、重启后选择Tools就看到插件了,这里我们选择「切换语言至英文」,再次重启IntelliJ IDEA
使用插件实施代码检测
目前该插件的代码检测模式有两种:实施检测、手动触发。
实时检测
实时检测功能在开发过程中对当前文件进行检测,并以高亮的形式提示出来,例如定义一个错误命名的抽象类,提示如下:
该功能默认开启,也可以通过配置关闭,建立大家保持开启状态,以时刻矫正自己!有些规则也实现了Quick Fix功能,可以通过快捷键「Option+Enter」呼出Intention菜单,不同的规则会提示不同信息的Quick Fix按钮。
代码扫描
可以通过右键菜单、Toolbar按钮、快捷键三种方式手动触发代码检测。
例如,对某个代码文件进行规约检测:
也可以对整个项目进行规约扫描,例如:
扫描结果如下:
代码提交检测
在代码提交时也可以进行检测设置,如下:
这样提交时也会进行规约检测(ps:关于是否提交时重新格式化代码,建议在编写代码的同时进行格式化,而不要在这里进行格式化)!
QA
1、如何对项目整体进行代码Format?
选中要Format的代码目录,快捷键"option+command+L"。
2、设置Save Actions代码保存时自动格式化
为了方便时时刻刻都执行代码格式化操作,这里设置IDEA Save Actions功能,具体步骤如下:
1)、安装Save Actions插件,如下图所示:
2)、打开设置,找到Save Actions设置,勾选如下图所示三个复选框,这样每次保存代码时就能自动进行格式化,并且还会去掉无用import引入
参考资料:
https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md
https://github.com/google/styleguide
Java代码格式化规范实践总结的更多相关文章
- java代码注释规范
java代码注释规范 代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率.也是程序代码可维护性的重要环节之一.所以我们不是为写注释而写注释.下面说一下我们在诉求网二 ...
- [转]java代码注释规范
代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率.也是程序代码可维护性的重要环节之一.所以我们不是为写注释而写注释.下面说一下我们在诉求网二期开发中使用的代码注释规范 ...
- JAVA 代码开发规范
一.开发工具规范: 1. 开发工具经项目负责人调试后统一确定. 2. 开发工具一经确定不允许集成任何非统一插件,若有需要,经项目负责人同意后统一为 项目组成员添加. 3. 开发工具的编码格式不允许修改 ...
- 使用 ReSharper,输入即遵循 StyleCop 的代码格式化规范
使用 ReSharper,输入即遵循 StyleCop 的代码格式化规范 StyleCop 可以帮助强制执行代码格式化规范,ReSharper 可以帮助你更高效地编写代码.把两者结合起来,你便能高效地 ...
- Eclipse中设置Java代码格式化
一.自定义 Java 代码格式化 [Java-Code-Formatting.xml 下载],下载完毕以后,打开 Eclipse 找到如下图界面,点击 Import 导入即可.
- (转)Java代码书写规范
0. 安装阿里代码规范的eclipse插件 https://www.cnblogs.com/caer/p/7753522.html 1.基本原则 强制性原则: 1.字符串的拼加操作,必须使用S ...
- Java学习---Java代码编写规范
编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...
- Java代码编写规范(转载)
编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...
- IDEAL葵花宝典:java代码开发规范插件 lombok 插件
前言: lombok简介: lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下. 那么 ...
随机推荐
- display: inline、block、inline-block、flex和inline-flex
inline 共享一行 不能修改width.height属性,大小由内容撑开 padding属性 top.right.bottom.left设置都有效:margin属性只有left.right设置有效 ...
- 创建一个springboot项目
进入https://start.spring.io/ 再点击GENERATE,下载解压即可 注意配置好阿里云的仓库镜像,免得依赖无法下载 不下载最新版springboot是因为我在测试中遇到了问题,貌 ...
- RocketMQ基础概念剖析,并分析一下Producer的底层源码
由于篇幅原因,本次的源码分析只限于Producer侧的发送消息的核心逻辑,我会通过流程图.代码注释.文字讲解的方式来对源码进行解释,后续应该会专门开几篇文章来做源码分析. 这篇博客聊聊关于Rocket ...
- 100道Java高频面试题(阿里面试官整理)
我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...
- 洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树
洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树 题目描述 方伯伯正在做他的 \(Oj\) .现在他在处理 \(Oj\) 上的用户排名问题. \(Oj\) 上注册了 \(n\) 个用户 ...
- 2020年HTML5考试模拟题整理(二)
1.以下是HTML5新增的标签是: AA.<aside>B.<isindex> C. <samp>D.<s>2.以下不是HTML5的新增的标签是: BA ...
- Java 常用类——StringBuffer&StringBuilder【可变字符序列】
一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...
- 越来越受欢迎的Vue想学么,90后小姐姐今儿来教你
摘要:Vue的相关技术原理成为了前端岗位面试中的必考知识点,掌握 Vue 对于前端工程师来说更像是一门"必修课". 本文原作者为尹婷,擅长前端组件库研发和微信机器人. 我们发现, ...
- IntelliJ-IDEA 打包代码报错
一.问题由来 使用 IntelliJ-IDEA 打包项目一直以来都没问题,可是上周的时候,突然打包就报错了,并且Maven中的pom.xml文件确定是没有改过,打包的配置文件也没有修改过. 报错信息如 ...
- 强化学习导论 课后习题参考 - Chapter 1,2
Reinforcement Learning: An Introduction (second edition) - Chapter 1,2 Chapter 1 1.1 Self-Play Suppo ...