寫Java代碼的時候,經常會涉及到重複性的操作,這個時候就會想要是有這樣一個插件就好了,如果是大家都會遇到的場景,IDE或許已經提供了,再不然也有可能有人編寫了相關的插件。
要是這個操作是你們的編碼環境特有的,那就只能自己寫工具了。所以這裏來學學如何編寫IDEA插件,讓自己的編程環境更加強大,更好的進行裝逼。
開發環境
開發IDEA插件有以下這些依賴:
-
IntelliJ IDEA Community Edition
-
IntelliJ IDEA Community Edition 源碼
-
Plugin DevKit 插件
-
IntelliJ Platform SDK
安裝IntelliJ IDEA Community Edition
你可能已經安裝了Ultimate版本,但是你還是需要安裝IDEA的社區版本。因爲商業版是閉源的,所以在調試時無法調試核心代碼。
下載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
添加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中。關注微信公衆號:Java技術棧,在後臺回覆:idea,可以獲取我整理的 N 篇最新 IDEA 教程,都是乾貨。
配置IntelliJ Platform SDK
打開File | Project Structure
新建一個IntelliJ Platform SDK
:
Java SDK選擇我們剛剛建立的IDEA jdk
:
然後我們可以把下載的IDEA社區版源碼添加到源碼路徑中,這樣在調試時,就可以調試IDEA自身的代碼了:
第一個插件
我們來編寫一個最簡單的插件來學習編寫一個插件的完整步驟。
新建工程
選擇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="[email protected]" 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>
新建一個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:
<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就可以看到插件的效果了。
來源:木杉的博客 http://imushan.com/