Github热度周排行第一,阿里Java规约插件开发之路曝光

简介: 10月14号,云栖大会研发效能专场,《阿里巴巴Java开发手册》IDE插件(包括PMD规则实现库)正式对外开源,并且迅速占领Github开源热度周排行榜第一的位置,作为项目组的一员,看到业界对该项目的关注及认可,发自内心的高兴。高兴之余,分享一下在整个过程中的一些心得体会。
大家好,我是研发效能事业部-天基-应用与基础运维平台的骏烈,集团编码规约P3C项目IDE插件主要开发者,家有一只小边牧,叫骏骨。

25014180dcab25143e8026208eb8e8826aa37702

10月14号,云栖大会研发效能专场,《阿里巴巴Java开发手册》IDE插件(包括PMD规则实现库)正式对外开源,并且迅速占领Github开源热度周排行榜第一的位置,作为项目组的一员,看到业界对该项目的关注及认可,发自内心的高兴。高兴之余,分享一下在整个过程中的一些心得体会。

8e0388e8f93dfbff6d24cc5fb7fb380413aaff2e

如果把每个人当成是一个分支,那么从我个人的分支视角而言,P3C经历了规则实现、IDEA集成、Eclipse集成、开源准备等几个历程。其他分支如Aone实验室集成、Code Review集成等就不过多描述了。

插件开发之旅

PMD规则实现

经过几次的讨论、调研,项目组决定在一期实现并发、注释、命名、OOP、集合等方面的41条规则,并且选用PMD作为主要实现框架(CheckStyle主要解决代码风格的问题;而Findbugs需要事先编译工程,不太友好;PMD已经有很多通用的规则实现,某些规则我们改改就可以用或者是直接使用)。PMD原生不支持跨文件扫描,所以一些特殊的需要跨文件扫描的规则需要基于IDE、Sonar各自平台的能力去实现(如:所有的覆写方法,必须加@Override注解)。

在实现规则的时候始终遵循一个原则:对于错误,另可少报也不误报,误报很有可能会让开发同学产生阴影,并从此不再信任;虽然不能100%的消除误报,但一定要尽最大努力去往靠近这个目标。

IDE插件集成

IDEA

规则陆续实现,我也开始准备IDE插件的开发工作,由于集团内部大部分人使用的都是IDEA,所以就先实现IDEA的插件吧。

我们的规则基本是基于PMD实现的,那么是不是该基于IDEA的PMD插件去做集成呢?一开始我也是这么想的,但是却发现PMD插件好像不漂亮,基于这个去集成会有人用吗?如果是我自己,我会喜欢吗?答案是否定的!如果我自己都不喜欢的产品,干嘛还要去做。

经过多方搜索、调研,我选择了基于IDEA的Inspection机制来提供实时检测功能;同时基于PMD实现的每一条规则需要单独成为一个Inspection,这样才方便用户对规则的进行灵活配置;最后需要提供对文件、目录、工程的扫描机制,并且要有灵活美观的结果展示界面,处于这样的考虑我决定基于Running Inspection by Name 的功能来实现,他不仅能够指定需要执行的Inspection(规则),还有一个现成的界面供我使用,我可不认为我在UI方面的感觉会比Jetbrains的设计师们强。

看到这里,大家是不是一阵嘘声,我靠,原来这个牛逼的界面不是你实现的啊!怪我咯,只能怪你们对IDEA不够了解,哈哈哈。不过,虽然看似简单,但是真正在集成的时候会遇到各种各样的问题——PMD规则转换、性能优化方案、Inspection创建机制等,在加上Running Inspection By Name的代码不是open api带来的兼容问题,很多东西都得不断尝试,IDEA的插件开发不像我们常用框架那样文档丰富,很多东西得自己去找,搜代码、看示例,甚至有时候你得去试。

在IDEA插件集成期间,蚂蚁技术团队同学从Jetbrains邀请到了IDEA的主要开发康斯坦丁,做了为期一天半的插件开发培训,我也有幸参加了这次培训。这次培训除了更加系统、全面的学习IDEA插件开发外,收获最大的是认识了许多对插件开发感兴趣的同学们。

 IDEA插件最终于2月下旬对内顺利发布,并且反响不错。看到大家的评价,内心一阵窃喜。

7e2937f1cbf3d95371de93a0dfb548333868fc95

Eclipse

Eclipse插件是基于已有的PMD插件开发的,PMD插件就像一部很久没开的汽车一样总是存在这样或那样的问题,官方在几年之间除了一些bug的修复,也仅仅是对PMD包的升级了吧,但由于时间紧迫加上我平时工作不用Eclipse,也没有发现类似IDEA Run Insection By Name的东西可以供我直接使用,所以很抱歉,并没有提供一个体验良好的插件给你们。

Eclipse使用OSGI模块的形式来管理各个插件,任何东西总是存在其利弊,如果你习惯了IDEA简单粗暴的ClassLoader机制,你会有点难以接受——“因为简单,所以美好”。因为对Eclipse不熟的原因,所以配置了一套Gradle的依赖管理,在IDEA写代码、远程调试,Eclipse里面编译启动插件,是不是很无语。此外Eclipse的集成工作没什么好说的,改代码、集成规则、修bug,终于跟IDEA一样在2月下旬对大家发布了。

开源

其实在我开始做插件的时候,就有同学说,规约这个东西之前就有人搞过,没一个搞起来的。但是孤尽(《阿里巴巴Java开发手册》作者)不仅搞起来了,还在业界产生了巨大的影响力,情怀、毅力缺一不可。随着《阿里巴巴Java开发手册》在业界的影响力逐渐扩大,我们决定要把规约扫描插件开源出去,希望能帮助到更多的开发者。

代码注释、代码重构、国际化、以及新增规则等工作都按计划进行着。IDE插件方面,原有的PMD插件相对于我们的规约来说有很多冗余功能,并且原来的PMD代码其实有很多违反规约的地方,国际化改造估计也需要额外花上一些时间,直接开源出去也会有不好的影响,所以干脆花了一周多的时间重写了一版,界面相对简洁、功能刚好(没有多余功能),看起来不错,可能是对插件的开发相对熟悉了吧,感觉这次重构出奇的顺利。但即便如此,Eclipse插件还是需要更好的体验,以及实时检测方面的一些扩展。

总结

P3C项目能够取得目前的成果,主要应该归功于《阿里巴巴Java开发手册》在业界的影响力以及项目组所有小伙伴的努力。不过就插件本身来说,我觉得应该把自己当做用户来看待,不论开源与否一定要从产品层面把体验做好;技术是为大家服务的,如果产品做得不够好,技术再牛也是白搭,P3C项目就是一个很好的例子——IDEA插件的整体反响非常不错,而Eclipse却因为体验上的欠缺不断的收到用户改进意见。希望其他同学以此为戒,P3C项目需要在各个方面继续努力,尤其是在Eclipse插件体验、功能方面,这样才能走得更远。

谨以此文献给所有的同学们,同时着重感谢P3C项目组的小伙伴们的辛苦付出,@玄坛、@如柏、@胜燕、@可期、@曾候、@昶乐、@孤尽、@否泰。

在使用插件过程中,有任何问题或建议,欢迎与代码规约作者 孤尽 联系,也欢迎加入P3C项目组,一起打造具有全球竞争力,效率/质量最优的一站式研发/运维/测试平台。 邮件申请:guanbao.yanggb@taobao.com 


为了帮助大家更好的使用规约插件,11月3日15:00我们将开启玩转《阿里巴巴开发手册》 P3C插件在线直播,提供视频操作指南,欢迎报名!


嘉宾简介:

蔡慷(骏烈):研发效能事业部-天基-应用与基础运维平台高级工程师,《阿里巴巴开发手册》 P3C项目IDE插件主要开发者。
龚胜芳(胜燕):阿里巴巴研发协同平台高级工程师,《阿里巴巴开发手册》 P3C项目云效在线扫描主要开发者。

议题简介:
IDEA、Eclipse插件本地扫描演示,P3C插件开发介绍;
阿里巴巴Java手册在线全量扫描如何使用,与云效发布验证自动打通卡点。

直播活动
参与直播互动用户,将有机会赢取阿里巴巴研究员毕玄签名的《码出高效 阿里巴巴Java开发手册详解》试读本(共5本)!


本文来源:云效微信公众号(ali_yunxiao)

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
相关文章
|
19天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
4天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
5天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
38 10
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
12天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
14天前
|
人工智能 小程序 Java
JAVA开发智慧学校系统源码+人脸电子班牌布局
智慧校园是通过利用物联网,大数据技术来改变师生和校园资源相互交互的方式,以便提高交互的明确性、灵活性和响应速度,从而实现智慧化服务和管理的校园模式。
|
17天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
17 3
|
20天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
20天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发

热门文章

最新文章