自己動手,豐衣足食:從零開始寫個 IDEA 外掛,要啥功能就做啥
寫Java程式碼的時候,經常會涉及到重複性的操作,這個時候就會想要是有這樣一個外掛就好了,如果是大家都會遇到的場景,IDE或許已經提供了,再不然也有可能有人編寫了相關的外掛。
要是這個操作是你們的編碼環境特有的,那就只能自己寫工具了。所以這裡來學學如何編寫IDEA外掛,讓自己的程式設計環境更加強大,更好的進行裝x。
開發環境
開發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中。關注微信公眾號:匠心零度,在後臺回覆:idea,可以獲取我整最新 IDEA 教程,都是乾貨。
配置IntelliJ Platform SDK
開啟 File|ProjectStructure新建一個 IntelliJPlatformSDK:
Java SDK選擇我們剛剛建立的 IDEA jdk:
然後我們可以把下載的IDEA社群版原始碼新增到原始碼路徑中,這樣在除錯時,就可以除錯IDEA自身的程式碼了:
第一個外掛
我們來編寫一個最簡單的外掛來學習編寫一個外掛的完整步驟。
新建工程
選擇 IntellJPlatformPlugin,然後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>
新建一個Action
外掛擴充套件IDEA最常見的方式就是在選單欄或者工具欄中新增選單項,使用者通過點選選單項來觸發外掛功能。IDEA提供了 AnAction類,這個類有一個虛方法 actionPerformed,這個方法會在每次選單被點選時呼叫。
新建一個自定義的Action有兩個步驟:
1、 繼承 AnAction類,在 actionPerformed方法中實現外掛邏輯 2、 註冊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就可以看到外掛的效果了。
相關文章
- 【IOS】自己動手豐衣足食--圖片篇iOS
- 【IOS】自己動手豐衣足食-圖示篇ICONiOS
- 自己動手豐衣足食-搞定網頁亂碼 (轉)網頁
- 從零開始編寫一個babel外掛Babel
- 從零開始寫Java Web框架——maven 外掛JavaWeb框架Maven
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- 從零開始實現一個MyBatis加解密外掛MyBatis解密
- 從零開始寫一個ExporterExport
- 自己動手搞一個tip 外掛
- 從零開始編寫自己的JavaScript框架(一)JavaScript框架
- 從零開始編寫自己的JavaScript框架(二)JavaScript框架
- 從零開始手寫一個微前端框架-渲染篇前端框架
- 從零開始仿寫一個抖音App——開始APP
- 從零開始手寫Koa2框架框架
- 從零開始寫一個網頁網頁
- 自己模擬遊戲引擎,動手寫個js碰撞檢測外掛遊戲引擎JS
- 為啥我要從阿里離職阿里
- 自己寫一個Babel外掛Babel
- 如何從零編寫一個vite外掛 建立 vite 外掛通用模板Vite
- Ubuntu linux 為啥要開始選擇ubuntu LINUXUbuntuLinux
- 【React技術棧】從零開始手寫reduxReactRedux
- 如何從零開始寫一個網站網站
- Jenkins從零開始(二)- 常用外掛及問題Jenkins
- 從頭開始開發一個 Gradle 外掛Gradle
- 從零開始寫一個node爬蟲(一)爬蟲
- 從零開始寫一個Javascript解析器JavaScript
- 從零開始 實現一個自己的指令碼引擎指令碼
- 從零開始實現一個自己的指令碼引擎指令碼
- 從零開始帶你上手體驗Sermant自定義外掛開發
- 從零開始實現ASP.NET Core MVC的外掛式開發(四) - 外掛安裝ASP.NETMVC
- 為啥要繼承一個空介面繼承
- java 從零開始手寫 RPC (04) -序列化JavaRPC
- 從零開始寫JavaScript框架(二)JavaScript框架
- 從零開始寫JavaScript框架(一)JavaScript框架
- 從零開始:用REACT寫一個格鬥遊戲(一)React遊戲
- 從零開始:用REACT寫一個格鬥遊戲(二)React遊戲
- 從零開始寫一個微前端框架-沙箱篇前端框架
- 從零開始搭建腳手架