從零開始編寫 IntelliJ IDEA 插件

寫 Java 代碼的時候,經(jīng)常會涉及到重復(fù)性的操作,這個時候就會想要是有這樣一個插件就好了,如果是大家都會遇到的場景,IDE 或許已經(jīng)提供了,再不然也有可能有人編寫了相關(guān)的插件。要是這個操作是你們的編碼環(huán)境特有的,那就只能自己寫工具了。所以這里來學(xué)學(xué)如何編寫 IDEA 插件,讓自己的編程環(huán)境更加強(qiáng)大,更好的進(jì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è)版是閉源的,所以在調(diào)試時無法調(diào)試核心代碼。

社區(qū)版的安裝包里是不包含源碼的,所以我們需要手動從 github 上 clone 一份:

git clone --depth 1 git://git.jetbrains.org/idea/community.git idea

關(guān)于從源碼運(yùn)行 IDEA 的方法參考:
http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html

添加 IDEA jdk

雖然不知道原因,但是根據(jù)
http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html

,我們需要建立一個IDEA jdk來運(yùn)行插件:

image

除非你在 Mac 上使用官方 JDK,否則你需要手動添加/lib/tools.jar到 classpath 中。

配置 IntelliJ Platform SDK

打開File | Project Structure新建一個IntelliJ Platform SDK

image

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

image

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

image
image

第一個插件

我們來編寫一個最簡單的插件來學(xué)習(xí)編寫一個插件的完整步驟。

新建工程

選擇IntellJ Platform Plugin,然后 Project SDK 指定剛剛新建的 plugin sdk:

image

新建的插件項目:

image

插件根目錄下有兩個目錄srcresources。src是插件代碼目錄,resource是插件資源目錄,其中META-INF/plugin.xml是插件的描述文件,就像 Java web 項目的web.xml一樣。

plugin.xml 默認(rèn)的內(nèi)容如下:

<idea-plugin>
  <id>com.your.company.unique.plugin.id</id>
  <name>Plugin display name here</name>
  <version>1.0</version>
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

  <description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>

  <change-notes><![CDATA[
      Add change notes here.<br>
      <em>most HTML tags may be used</em>
    ]]>
  </change-notes>

  
  <idea-version since-build="145.0"/>

  

  



  <extensions defaultExtensionNs="com.intellij">
    
  </extensions>

  <actions>
    
  </actions>

</idea-plugin>

新建一個 Action

插件擴(kuò)展 IDEA 最常見的方式就是在菜單欄或者工具欄中添加菜單項,用戶通過點擊菜單項來觸發(fā)插件功能。IDEA 提供了AnAction類,這個類有一個虛方法actionPerformed,這個方法會在每次菜單被點擊時調(diào)用。

新建一個自定義的 Action 有兩個步驟:

  1. 繼承AnAction類,在actionPerformed方法中實現(xiàn)插件邏輯
  2. 注冊 action,有兩種方式,通過代碼注冊和通過plugin.xml注冊

我們先寫一個簡單的 Action 類:

public class TextBoxes extends AnAction {
    
    
    public TextBoxes() {
        
        super("Text _Boxes");
        
        
    }
 
    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:

<actions>
  <group text="_Sample Menu" description="Sample menu">
    <add-to-group group-id="MainMenu" anchor="last"  />
       <action text="Text _Boxes" description="A test menu item" />
  </group>
</actions>

這里我們新建了一個菜單組,其中 text 字符串的下劃線表示這個字母作為快捷鍵。這個菜單顯示的效果如下:

image

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

image

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

image

運(yùn)行插件

運(yùn)行插件特別簡單,和運(yùn)行普通 Java 代碼一樣,點擊運(yùn)行或者調(diào)試的按鈕,就會啟動一個新的 IDEA 實例,這個實例中插件是生效的。

點擊 Text Boxes 就可以看到插件的效果了。

  • END -

最后,祝大家技術(shù)在沉淀中升華。

最新熱文

idea 牛逼插件,拿走不謝

程序員的口頭禪

15 個優(yōu)秀開源的 Spring Boot 學(xué)習(xí)項目,一網(wǎng)打盡!

GitHub上哪些有趣的項目

如何寫出沒有BUG的代碼

總有小驚喜

關(guān)注公眾號:「Java 知己」,每天更新Java知識哦,期待你的到來!

  • 發(fā)送「Idea」,獲取最新Idea激活工具。

  • 發(fā)送「Group」,加入無廣告微信Java技術(shù)群。

  • 發(fā)送「面試」,領(lǐng)取BATJ面試資料、面試視頻攻略。

  • 發(fā)送「玩轉(zhuǎn)算法」,領(lǐng)取《玩轉(zhuǎn)算法》系列視頻教程。

  • 千萬不要發(fā)送「1024」…

每日福利
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容