從0到1開發(fā)一個(gè)IntelliJ IDEA插件
大家好,我是鋒哥。
寫 Java 代碼的時(shí)候,經(jīng)常會(huì)涉及到重復(fù)性的操作,這個(gè)時(shí)候就會(huì)想要是有這樣一個(gè)插件就好了,如果是大家都會(huì)遇到的場(chǎng)景,IDE或許已經(jīng)提供了,再不然也有可能有人編寫了相關(guān)的插件。
開發(fā)環(huán)境
開發(fā)IDEA插件有以下這些依賴:
IntelliJ IDEA Community Edition
IntelliJ IDEA Community Edition 源碼
Plugin DevKit 插件
IntelliJ Platform SDK
你可能已經(jīng)安裝了Ultimate版本,但是你還是需要安裝IDEA的社區(qū)版本。因?yàn)樯虡I(yè)版是閉源的,所以在調(diào)試時(shí)無(wú)法調(diào)試核心代碼。
社區(qū)版的安裝包里是不包含源碼的,所以我們需要手動(dòng)從github上clone一份:
git clone --depth 1 git://git.jetbrains.org/idea/community.git idea關(guān)于從源碼運(yùn)行IDEA的方法參考:Check Out And Build Community Edition
(https://plugins.jetbrains.com/docs/intellij/welcome.html?from=jetbrains.org)
添加 IDEA jdk
雖然不知道原因,但是根據(jù)Check Out And Build Community Edition
(https://plugins.jetbrains.com/docs/intellij/welcome.html?from=jetbrains.org),
我們需要建立一個(gè)IDEA jdk?來運(yùn)行插件:

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

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

然后我們可以把下載的 IDEA 社區(qū)版源碼添加到源碼路徑中,這樣在調(diào)試時(shí),就可以調(diào)試 IDEA 自身的代碼了:


第一個(gè)插件
我們來編寫一個(gè)最簡(jiǎn)單的插件來學(xué)習(xí)編寫一個(gè)插件的完整步驟。
新建工程
選擇IntellJ Platform Plugin,然后Project SDK指定剛剛新建的plugin sdk:

新建的插件項(xiàng)目:

插件根目錄下有兩個(gè)目錄src和resources。src是插件代碼目錄,resource是插件資源目錄,其中META-INF/plugin.xml是插件的描述文件,就像Java web項(xiàng)目的web.xml一樣。
plugin.xml 默認(rèn)的內(nèi)容如下:
<idea-plugin>
??<id>com.your.company.unique.plugin.idid>
??<name>Plugin?display?name?herename>
??<version>1.0version>
??<vendor?email="[email protected]"?url="http://www.yourcompany.com">YourCompanyvendor>
??<description>??????Enter?short?description?for?your?plugin?here.
??????most?HTML?tags?may?be?used
????]]>description>
??<change-notes>??????Add?change?notes?here.
??????most?HTML?tags?may?be?used
????]]>
??change-notes>
??
??<idea-version?since-build="145.0"/>
??
??
??<extensions?defaultExtensionNs="com.intellij">
????
??extensions>
??<actions>
????
??actions>
idea-plugin>新建一個(gè) Action
插件擴(kuò)展 IDEA 最常見的方式就是在菜單欄或者工具欄中添加菜單項(xiàng),用戶通過點(diǎn)擊菜單項(xiàng)來觸發(fā)插件功能。IDEA 提供了?AnAction?類,這個(gè)類有一個(gè)虛方法?actionPerformed,這個(gè)方法會(huì)在每次菜單被點(diǎn)擊時(shí)調(diào)用。
新建一個(gè)自定義的 Action 有兩個(gè)步驟:
1. 繼承?AnAction?類,在?actionPerformed?方法中實(shí)現(xiàn)插件邏輯
2. 注冊(cè) action,有兩種方式,通過代碼注冊(cè)和通過?plugin.xml?注冊(cè)
我們先寫一個(gè)簡(jiǎn)單的Action類:
public?class?TextBoxes?extends?AnAction?{
????//?如果通過Java代碼來注冊(cè),這個(gè)構(gòu)造函數(shù)會(huì)被調(diào)用,傳給父類的字符串會(huì)被作為菜單項(xiàng)的名稱
????//?如果你通過plugin.xml來注冊(cè),可以忽略這個(gè)構(gòu)造函數(shù)
????public?TextBoxes()?{
????????//?設(shè)置菜單項(xiàng)名稱
????????super("Text?_Boxes");
????????//?還可以設(shè)置菜單項(xiàng)名稱,描述,圖標(biāo)
????????//?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());
????}
}然后我們?cè)?/span>plugin.xml中注冊(cè)這個(gè)Action:
<actions>
??<group?id="MyPlugin.SampleMenu"?text="_Sample?Menu"?description="Sample?menu">
????<add-to-group?group-id="MainMenu"?anchor="last"??/>
???????<action?id="Myplugin.Textboxes"?class="Mypackage.TextBoxes"?text="Text?_Boxes"?description="A?test?menu?item"?/>
??group>
actions>這里我們新建了一個(gè)菜單組,其中 text 字符串的下劃線表示這個(gè)字母作為快捷鍵。這個(gè)菜單顯示的效果如下:

除了手動(dòng)新建Action,IDEA還提供了快速新建的方法,在代碼目錄上點(diǎn)擊新建,可以看到Action:

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

運(yùn)行插件
運(yùn)行插件特別簡(jiǎn)單,和運(yùn)行普通Java代碼一樣,點(diǎn)擊運(yùn)行或者調(diào)試的按鈕,就會(huì)啟動(dòng)一個(gè)新的IDEA實(shí)例,這個(gè)實(shí)例中插件是生效的。
點(diǎn)擊 Text Boxes 就可以看到插件的效果了。
參考資料
Setting Up a Development Environment How to make an IntelliJ IDEA plugin in less than 30 minutes
作者:木杉
來源:www.cnblogs.com/mushan/p/12275581.html
2022年Java就業(yè)實(shí)戰(zhàn)課程B站火爆連載更新中...
微信小程序電商?SpringBoot2+?Vue3.2 Element Plus后臺(tái)管理實(shí)戰(zhàn) 需要學(xué)習(xí)的,如果沒加過鋒哥微信的 加一下鋒哥微信備注?電商?即可獲取B站學(xué)習(xí)地址
點(diǎn)個(gè)?在看? 喜歡是一種感覺 在看是一種支持 ↘↘↘


