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)

相关文章
|
14天前
|
人工智能 安全 IDE
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
|
27天前
|
JavaScript 安全 Java
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
47 12
|
6天前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
|
7天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
15天前
|
人工智能 Java 数据处理
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
|
Java 容器
翻译:Gradle之 Java插件
原文地址 http://www.gradle.org/docs/current/userguide/java_plugin.html 23.1. Usage用法 要使用Java插件,在脚本里加入: Example 23.1. Using the Java plugin build.gradle apply plugin: 'java' 23.2. Source sets源集 Java插件引入了一个概念:源集(source set),一个源集就是一组被一起编译一起执行的源文件。
809 0
|
15天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
140 60
【Java并发】【线程池】带你从0-1入门线程池
|
4天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
54 23
|
11天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
77 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
|
27天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
105 14