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)

相关文章
|
25天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
83 0
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1229 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
3月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
168 2
|
3月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
195 3
|
3月前
|
移动开发 Cloud Native 安全
Java:跨平台之魂,企业级开发的磐石
Java:跨平台之魂,企业级开发的磐石
|
3月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
272 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
4月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
189 1