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)

目录
打赏
0
1
1
3
731
分享
相关文章
|
4月前
|
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
243 6
idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
117 15
idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
89 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
edge浏览器加载java插件
edge浏览器加载java插件
381 1
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
157 0
【资料】阿里Java开发手册
本文是关于分享阿里Java开发手册资源及促进编程规范学习的指南。作者以个人经历引入,讲述了公司领导通过细致讲解阿里Java开发手册,提升了团队对代码质量和编程规范的认识
1406 0
【资料】阿里Java开发手册
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
198 4
Xamarin 开发者的社区资源概览:从官方文档到GitHub示例,全面探索提升开发技能与解决问题的多元化渠道与实用工具
【8月更文挑战第31天】Xamarin 开发者社区资源概览旨在提升开发效率与解决问题,涵盖官方文档、社区论坛、GitHub 项目等。官方文档详尽,涵盖 Xamarin.Forms 使用、性能优化等;社区论坛供交流心得;GitHub 提供示例代码。此外,第三方博客、视频教程及 Xamarin University 等资源也丰富多样,适合各阶段开发者学习与提升。通过综合利用这些资源,开发者可不断进步,应对技术挑战。
82 0
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等