寫Java代碼的時候,常常會涉及到重複性的操做,這個時候就會想要是有這樣一個插件就行了,若是是你們都會遇到的場景,IDE或許已經提供了,再否則也有可能有人編寫了相關的插件。要是這個操做是大家的編碼環境特有的,那就只能本身寫工具了。因此這裏來學學如何編寫IDEA插件,讓本身的編程環境更增強大,更好的進行裝逼。html
開發IDEA插件有如下這些依賴:java
你可能已經安裝了Ultimate版本,可是你仍是須要安裝IDEA的社區版本。由於商業版是閉源的,因此在調試時沒法調試核心代碼。git
社區版的安裝包裏是不包含源碼的,因此咱們須要手動從github上clone一份:github
git clone --depth 1 git://git.jetbrains.org/idea/community.git idea
關於從源碼運行IDEA的方法參考:Check Out And Build Community Editionweb
雖然不知道緣由,可是根據Check Out And Build Community Edition,咱們須要創建一個IDEA jdk
來運行插件:編程
除非你在Mac上使用官方JDK,不然你須要手動添加/lib/tools.jar
到classpath中。segmentfault
打開File | Project Structure
新建一個IntelliJ Platform SDK
:intellij-idea
Java SDK選擇咱們剛剛創建的IDEA jdk
:less
而後咱們能夠把下載的IDEA社區版源碼添加到源碼路徑中,這樣在調試時,就能夠調試IDEA自身的代碼了:ide
咱們來編寫一個最簡單的插件來學習編寫一個插件的完整步驟。
選擇IntellJ Platform Plugin
,而後Project SDK指定剛剛新建的plugin sdk:
新建的插件項目:
插件根目錄下有兩個目錄src
和resources
。src
是插件代碼目錄,resource
是插件資源目錄,其中META-INF/plugin.xml
是插件的描述文件,就像Java web項目的web.xml
同樣。
plugin.xml默認的內容以下:
<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> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> <idea-version since-build="145.0"/> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html on how to target different products --> <!-- uncomment to enable plugin in all products <depends>com.intellij.modules.lang</depends> --> <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions> <actions> <!-- Add your actions here --> </actions> </idea-plugin>
插件擴展IDEA最多見的方式就是在菜單欄或者工具欄中添加菜單項,用戶經過點擊菜單項來觸發插件功能。IDEA提供了AnAction
類,這個類有一個虛方法actionPerformed
,這個方法會在每次菜單被點擊時調用。
新建一個自定義的Action有兩個步驟:
AnAction
類,在actionPerformed
方法中實現插件邏輯plugin.xml
註冊咱們先寫一個簡單的Action類:
public class 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:
<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>
這裏咱們新建了一個菜單組,其中text字符串的下劃線表示這個字母做爲快捷鍵。這個菜單顯示的效果以下:
除了手動新建Action,IDEA還提供了快速新建的方法,在代碼目錄上點擊新建,能夠看到Action:
能夠在這個面板中填寫你要新建的Action信息,IDEA會幫你新建類,還有在plugin.xml中幫你註冊:
運行插件特別簡單,和運行普通Java代碼同樣,點擊運行或者調試的按鈕,就會啓動一個新的IDEA實例,這個實例中插件是生效的。
點擊Text Boxes就能夠看到插件的效果了。
本文獨立博客地址:從零開始編寫IntelliJ IDEA插件 | 木杉的博客