<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從 0 到 1 開發(fā)一個 IntelliJ IDEA 插件

          共 3218字,需瀏覽 7分鐘

           ·

          2022-02-28 08:09

          往期熱門文章:

          1、別瞎寫工具類了,Spring自帶的不香嗎?
          2、SpringBoot + Redis:模擬 10w 人的秒殺搶單
          3、如何選擇合適的分布式ID生成方案
          4、本機號碼一鍵登錄原理與應用
          5、比 SpringBoot更快,更輕,更小!

          寫 Java 代碼的時候,經(jīng)常會涉及到重復性的操作,這個時候就會想要是有這樣一個插件就好了,如果是大家都會遇到的場景,IDE或許已經(jīng)提供了,再不然也有可能有人編寫了相關(guān)的插件。

          要是這個操作是你們的編碼環(huán)境特有的,那就只能自己寫工具了。所以這里來學學如何編寫IDEA 插件,讓自己的編程環(huá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)于從源碼運行IDEA的方法參考:Check Out And Build Community Edition

          添加 IDEA jdk

          雖然不知道原因,但是根據(jù)Check Out And Build Community Edition,我們需要建立一個IDEA jdk?來運行插件:

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

          配置 IntelliJ Platform SDK

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

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

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

          第一個插件

          我們來編寫一個最簡單的插件來學習編寫一個插件的完整步驟。

          新建工程

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

          新建的插件項目:

          插件根目錄下有兩個目錄srcresourcessrc是插件代碼目錄,resource是插件資源目錄,其中META-INF/plugin.xml是插件的描述文件,就像Java web項目的web.xml一樣。
          plugin.xml 默認的內(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>
          新建一個 Action
          件擴展 IDEA 最常見的方式就是在菜單欄或者工具欄中添加菜單項,用戶通過點擊菜單項來觸發(fā)插件功能。IDEA 提供了?AnAction?類,這個類有一個虛方法?actionPerformed,這個方法會在每次菜單被點擊時調(diào)用。
          新建一個自定義的 Action 有兩個步驟:
          1. 繼承?AnAction?類,在?actionPerformed?方法中實現(xiàn)插件邏輯
          2. 注冊 action,有兩種方式,通過代碼注冊和通過?plugin.xml?注冊
          我們先寫一個簡單的Action類:
          public?class?TextBoxes?extends?AnAction?{
          ????// 如果通過Java代碼來注冊,這個構(gòu)造函數(shù)會被調(diào)用,傳給父類的字符串會被作為菜單項的名稱
          ????// 如果你通過plugin.xml來注冊,可以忽略這個構(gòu)造函數(shù)
          ????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:

          ??<group?id="MyPlugin.SampleMenu"?text="_Sample Menu"?description="Sample menu">
          ????<add-to-group?group-id="MainMenu"?anchor="last"??/>
          ???????"Myplugin.Textboxes"
          ?class="Mypackage.TextBoxes"?text="Text _Boxes"?description="A test menu item"?/>
          ??group>
          這里我們新建了一個菜單組,其中 text 字符串的下劃線表示這個字母作為快捷鍵。這個菜單顯示的效果如下:

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

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

          運行插件

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

          參考資料

          • Setting Up a Development Environment

          • How to make an IntelliJ IDEA plugin in less than 30 minutes

          轉(zhuǎn)自:木杉是天才
          鏈接:https://www.cnblogs.com/mushan/p/12275581.html


          最近熱文閱讀:

          1、如何選擇合適的分布式ID生成方案
          2、面試題:為什么數(shù)據(jù)庫連接池不采用 IO 多路復用?
          3、SpringBoot 配置文件敏感信息如何加密?
          4、線上訂單號重復了?一招搞定它!
          5、一款高顏值的MySQL管理工具:Sequel Pro
          6、2021 年 GitHub 最佳開源軟件榜單
          7、Logback這樣配置,性能提升10倍!
          8、揭曉 2021 編程語言排行榜
          9、還在用策略模式解決 if-else?Map+函數(shù)式接口方法才是YYDS!
          10、牛客網(wǎng):為什么不能將實數(shù)作為 HashMap 的 key?
          關(guān)注公眾號,你想要的Java都在這里

          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  69成人网 | 三级网址日本 | 久久久久久久久久久高清毛片一级 | 一级黄色免费电影 | 欧美大香蕉在线 |