天天看點

Github熱度周排行第一,阿裡Java規約插件開發之路曝光

大家好,我是研發效能事業部-天基-應用與基礎運維平台的駿烈,集團編碼規約P3C項目IDE插件主要開發者,家有一隻小邊牧,叫駿骨。

Github熱度周排行第一,阿裡Java規約插件開發之路曝光

10月14号,雲栖大會研發效能專場,《阿裡巴巴Java開發手冊》IDE插件(包括PMD規則實作庫)正式對外開源,并且迅速占領Github開源熱度周排行榜第一的位置,作為項目組的一員,看到業界對該項目的關注及認可,發自内心的高興。高興之餘,分享一下在整個過程中的一些心得體會。

Github熱度周排行第一,阿裡Java規約插件開發之路曝光

如果把每個人當成是一個分支,那麼從我個人的分支視角而言,P3C經曆了規則實作、IDEA內建、Eclipse內建、開源準備等幾個曆程。其他分支如Aone實驗室內建、Code Review內建等就不過多描述了。

<b>插件開發之旅</b>

<b>PMD規則實作</b>

經過幾次的讨論、調研,項目組決定在一期實作并發、注釋、命名、OOP、集合等方面的41條規則,并且選用PMD作為主要實作架構(CheckStyle主要解決代碼風格的問題;而Findbugs需要事先編譯工程,不太友好;PMD已經有很多通用的規則實作,某些規則我們改改就可以用或者是直接使用)。PMD原生不支援跨檔案掃描,是以一些特殊的需要跨檔案掃描的規則需要基于IDE、Sonar各自平台的能力去實作(如:所有的覆寫方法,必須加@Override注解)。

在實作規則的時候始終遵循一個原則:對于錯誤,另可少報也不誤報,誤報很有可能會讓開發同學産生陰影,并從此不再信任;雖然不能100%的消除誤報,但一定要盡最大努力去往靠近這個目标。

<b>IDE插件內建</b>

<b>IDEA</b>

規則陸續實作,我也開始準備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月下旬對内順利釋出,并且反響不錯。看到大家的評價,内心一陣竊喜。

Github熱度周排行第一,阿裡Java規約插件開發之路曝光

<b>Eclipse</b>

Eclipse插件是基于已有的PMD插件開發的,PMD插件就像一部很久沒開的汽車一樣總是存在這樣或那樣的問題,官方在幾年之間除了一些bug的修複,也僅僅是對PMD包的更新了吧,但由于時間緊迫加上我平時工作不用Eclipse,也沒有發現類似IDEA Run Insection By Name的東西可以供我直接使用,是以很抱歉,并沒有提供一個體驗良好的插件給你們。

Eclipse使用OSGI子產品的形式來管理各個插件,任何東西總是存在其利弊,如果你習慣了IDEA簡單粗暴的ClassLoader機制,你會有點難以接受——“因為簡單,是以美好”。因為對Eclipse不熟的原因,是以配置了一套Gradle的依賴管理,在IDEA寫代碼、遠端調試,Eclipse裡面編譯啟動插件,是不是很無語。此外Eclipse的內建工作沒什麼好說的,改代碼、內建規則、修bug,終于跟IDEA一樣在2月下旬對大家釋出了。

<b>開源</b>

其實在我開始做插件的時候,就有同學說,規約這個東西之前就有人搞過,沒一個搞起來的。但是孤盡(《阿裡巴巴Java開發手冊》作者)不僅搞起來了,還在業界産生了巨大的影響力,情懷、毅力缺一不可。随着《阿裡巴巴Java開發手冊》在業界的影響力逐漸擴大,我們決定要把規約掃描插件開源出去,希望能幫助到更多的開發者。

代碼注釋、代碼重構、國際化、以及新增規則等工作都按計劃進行着。IDE插件方面,原有的PMD插件相對于我們的規約來說有很多備援功能,并且原來的PMD代碼其實有很多違反規約的地方,國際化改造估計也需要額外花上一些時間,直接開源出去也會有不好的影響,是以幹脆花了一周多的時間重寫了一版,界面相對簡潔、功能剛好(沒有多餘功能),看起來不錯,可能是對插件的開發相對熟悉了吧,感覺這次重構出奇的順利。但即便如此,Eclipse插件還是需要更好的體驗,以及實時檢測方面的一些擴充。

<b>總結</b>

P3C項目能夠取得目前的成果,主要應該歸功于《阿裡巴巴Java開發手冊》在業界的影響力以及項目組所有小夥伴的努力。不過就插件本身來說,我覺得應該把自己當做使用者來看待,不論開源與否一定要從産品層面把體驗做好;技術是為大家服務的,如果産品做得不夠好,技術再牛也是白搭,P3C項目就是一個很好的例子——IDEA插件的整體反響非常不錯,而Eclipse卻因為體驗上的欠缺不斷的收到使用者改進意見。希望其他同學以此為戒,P3C項目需要在各個方面繼續努力,尤其是在Eclipse插件體驗、功能方面,這樣才能走得更遠。

謹以此文獻給所有的同學們,同時着重感謝P3C項目組的小夥伴們的辛苦付出,@玄壇、@如柏、@勝燕、@可期、@曾候、@昶樂、@孤盡、@否泰。

在使用插件過程中,有任何問題或建議,歡迎與代碼規約作者孤盡聯系,也歡迎加入P3C項目組,一起打造具有全球競争力,效率/品質最優的一站式研發/運維/測試平台。郵件申請:[email protected] 

為了幫助大家更好的使用規約插件,11月3日15:00我們将開啟玩轉《阿裡巴巴開發手冊》 P3C插件線上直播,提供視訊操作指南,歡迎報名!

嘉賓簡介:

蔡慷(駿烈):研發效能事業部-天基-應用與基礎運維平台進階工程師,《阿裡巴巴開發手冊》 P3C項目IDE插件主要開發者。

龔勝芳(勝燕):阿裡巴巴研發協同平台進階工程師,《阿裡巴巴開發手冊》 P3C項目雲效線上掃描主要開發者。

議題簡介:

IDEA、Eclipse插件本地掃描示範,P3C插件開發介紹;

阿裡巴巴Java手冊線上全量掃描如何使用,與雲效釋出驗證自動打通卡點。

直播活動

參與直播互動使用者,将有機會赢取阿裡巴巴研究員畢玄簽名的《碼出高效 阿裡巴巴Java開發手冊詳解》試讀本(共5本)!

本文來源:雲效微信公衆号(ali_yunxiao)

繼續閱讀