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)

相关文章
|
3月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
475 10
|
3月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
208 6
|
3月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
16天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
35 6
|
19天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
36 5
|
19天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
25 4
|
19天前
|
SQL Java API
|
19天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
34 2
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1032 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。