往期熱門文章:
1、《往期精選優秀博文都在這里了!》2、又一個程序員跑路刪庫跑路被抓了,導致服務器癱瘓 36 個小時!3、恕我直言,有了這款 IDEA 插件,你可能只需要寫 30% 的代碼。。。4、Java8 的 Stream API 的確牛X,但性能究竟如何呢?5、關于MySQL索引面試題的6連炮!招架的住嗎?6、真香!IDEA 最新版本,支持免打擾和輕量模式!
作者:木杉來源:http://dwz.date/BxH寫Java代碼的時候,經常會涉及到重復性的操作,這個時候就會想要是有這樣一個插件就好了,如果是大家都會遇到的場景,IDE或許已經提供了,再不然也有可能有人編寫了相關的插件。要是這個操作是你們的編碼環境特有的,那就只能自己寫工具了。所以這里來學學如何編寫IDEA插件,讓自己的編程環境更加強大,更好的進行裝逼。
一、開發環境
開發IDEA插件有以下這些依賴:
- IntelliJ IDEA Community Edition
- IntelliJ IDEA Community Edition 源碼
- Plugin DevKit 插件
- IntelliJ Platform SDK
1.1、安裝IntelliJ IDEA Community Edition
你可能已經安裝了Ultimate版本,但是你還是需要安裝IDEA的社區版本。因為商業版是閉源的,所以在調試時無法調試核心代碼。
1.2、下載IntelliJ IDEA Community Edition源碼
社區版的安裝包里是不包含源碼的,所以我們需要手動從github上clone一份:
git clone --depth 1 git://git.jetbrains.org/idea/community.git idea
關于從源碼運行IDEA的方法參考 Check Out And Build Community Edition:http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html
1.3、添加IDEA jdk
雖然不知道原因,但是根據Check Out And Build Community Edition:http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html我們需要建立一個
IDEA jdk
來運行插件:

除非你在Mac上使用官方JDK,否則你需要手動添加
/lib/tools.jar
到classpath中。
1.4、配置IntelliJ Platform SDK
打開
File | Project Structure
新建一個
IntelliJ Platform SDK
:

Java SDK選擇我們剛剛建立的
IDEA jdk
:

然后我們可以把下載的IDEA社區版源碼添加到源碼路徑中,這樣在調試時,就可以調試IDEA自身的代碼了:




二、第一個插件
我們來編寫一個最簡單的插件來學習編寫一個插件的完整步驟。
2.1、新建工程
選擇
IntellJ Platform Plugin
,然后Project SDK指定剛剛新建的plugin sdk:

新建的插件項目:

插件根目錄下有兩個目錄
src
和
resources
。
src
是插件代碼目錄,
resource
是插件資源目錄,其中
META-INF/plugin.xml
是插件的描述文件,就像Java web項目的
web.xml
一樣。plugin.xml默認的內容如下:
com.your.company.unique.plugin.id Plugin display name here 1.0 "support@yourcompany.com" url="http://www.yourcompany.com">YourCompany[ //mp.weixin.qq.com/s/PiAxqEhkR8g1AOYGGS5Yqw) Enter short description for your plugin here. most HTML tags may be used ]]>[ //mp.weixin.qq.com/s/PiAxqEhkR8g1AOYGGS5Yqw) Add change notes here. most HTML tags may be used ]]> "145.0"/> "com.intellij">
2.2、新建一個Action
插件擴展IDEA最常見的方式就是在菜單欄或者工具欄中添加菜單項,用戶通過點擊菜單項來觸發插件功能。IDEA提供了
AnAction
類,這個類有一個虛方法
actionPerformed
,這個方法會在每次菜單被點擊時調用。新建一個自定義的Action有兩個步驟:
- 繼承
AnAction
類,在actionPerformed
方法中實現插件邏輯 - 注冊action,有兩種方式,通過代碼注冊和通過
plugin.xml
注冊
我們先寫一個簡單的Action類:
publicclass TextBoxes extends AnAction {// 如果通過Java代碼來注冊,這個構造函數會被調用,傳給父類的字符串會被作為菜單項的名稱// 如果你通過plugin.xml來注冊,可以忽略這個構造函數public TextBoxes() {// 設置菜單項名稱super("Text _Boxes");// 還可以設置菜單項名稱,描述,圖標// super("Text _Boxes","Item description",IconLoader.getIcon("/Mypackage/icon.png")); }public void actionPerformed(AnActionEvent event) { Project project = event.getData(PlatformDataKeys.PROJECT); String txt= Messages.showInputDialog(project, "What is your name?", "Input your name", Messages.getQuestionIcon()); Messages.showMessageDialog(project, "Hello, " + txt + "!\n I am glad to see you.", "Information", Messages.getInformationIcon()); }}
然后我們在
plugin.xml
中注冊這個Action:
"MyPlugin.SampleMenu" text="_Sample Menu" description="Sample menu"> "MainMenu" anchor="last" /> "Myplugin.Textboxes"class="Mypackage.TextBoxes" text="Text _Boxes" description="A test menu item" />
這里我們新建了一個菜單組,其中text字符串的下劃線表示這個字母作為快捷鍵。這個菜單顯示的效果如下:

除了手動新建Action,IDEA還提供了快速新建的方法,在代碼目錄上點擊新建,可以看到Action:

可以在這個面板中填寫你要新建的Action信息,IDEA會幫你新建類,還有在plugin.xml中幫你注冊:

2.3、運行插件
運行插件特別簡單,和運行普通Java代碼一樣,點擊運行或者調試的按鈕,就會啟動一個新的IDEA實例,這個實例中插件是生效的。點擊Text Boxes就可以看到插件的效果了。
三、參考資料
- Setting Up a Development Environment
- How to make an IntelliJ IDEA plugin in less than 30 minutes
往期熱門文章:
1、《歷史文章分類導讀列表!精選優秀博文都在這里了!》2、關于MySQL索引面試題的6連炮!招架的住嗎?3、MyBatis她不香嗎?為啥老外卻喜歡Hibernate/Jpa?4、代碼對比工具,我就用這7個!5、Mybatis 中經典的 9 種設計模式!面試可以吹牛了!6、海量交易訂單查詢沒做“重試”,一哥們“喜提”P3故障!7、2020年Java框架排行榜,誰居榜首?8、格式化時間用了YYYY-MM-dd,元旦當天老板喊我回去改Bug!9、除了 P 站,程序員在摸魚時還喜歡上這些網站...10、39 個奇葩代碼注釋,看完笑哭了。。。