<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ā)一個(gè)IntelliJ IDEA插件

          共 3110字,需瀏覽 7分鐘

           ·

          2022-03-02 01:53

          大家好,我是鋒哥。

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

          要是這個(gè)操作是你們的編碼環(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àn)樯虡I(yè)版是閉源的,所以在調(diào)試時(shí)無(wú)法調(diào)試核心代碼。

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

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

          關(guān)于從源碼運(yùn)行IDEA的方法參考:Check Out And Build Community Edition
          (https://plugins.jetbrains.com/docs/intellij/welcome.html?from=jetbrains.org)

          添加 IDEA jdk

          雖然不知道原因,但是根據(jù)Check Out And Build Community Edition
          (
          https://plugins.jetbrains.com/docs/intellij/welcome.html?from=jetbrains.org),
          我們需要建立一個(gè)
          IDEA jdk?來運(yùn)行插件:

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

          配置 IntelliJ Platform SDK

          打開?File | Project Structure?新建一個(gè)?IntelliJ Platform SDK

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

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

          第一個(gè)插件

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

          新建工程

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

          新建的插件項(xiàng)目:

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

          plugin.xml 默認(rèn)的內(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>

          新建一個(gè) Action

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

          新建一個(gè)自定義的 Action 有兩個(gè)步驟:

          1. 繼承?AnAction?類,在?actionPerformed?方法中實(shí)現(xiàn)插件邏輯

          2. 注冊(cè) action,有兩種方式,通過代碼注冊(cè)和通過?plugin.xml?注冊(cè)

          我們先寫一個(gè)簡(jiǎn)單的Action類:

          public?class?TextBoxes?extends?AnAction?{
          ????//?如果通過Java代碼來注冊(cè),這個(gè)構(gòu)造函數(shù)會(huì)被調(diào)用,傳給父類的字符串會(huì)被作為菜單項(xiàng)的名稱
          ????//?如果你通過plugin.xml來注冊(cè),可以忽略這個(gè)構(gòu)造函數(shù)
          ????public?TextBoxes()?{
          ????????//?設(shè)置菜單項(xiàng)名稱
          ????????super("Text?_Boxes");
          ????????//?還可以設(shè)置菜單項(xiàng)名稱,描述,圖標(biāo)
          ????????//?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());
          ????}
          }

          然后我們?cè)?/span>plugin.xml中注冊(cè)這個(gè)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>

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

          除了手動(dòng)新建Action,IDEA還提供了快速新建的方法,在代碼目錄上點(diǎn)擊新建,可以看到Action:

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

          運(yùn)行插件

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

          點(diǎn)擊 Text Boxes 就可以看到插件的效果了。

          參考資料

          • Setting Up a Development Environment
          • How to make an IntelliJ IDEA plugin in less than 30 minutes

          作者:木杉

          來源:www.cnblogs.com/mushan/p/12275581.html



          2022年Java就業(yè)實(shí)戰(zhàn)課程B站火爆連載更新中...

          微信小程序電商?SpringBoot2+?Vue3.2 Element Plus后臺(tái)管理實(shí)戰(zhàn)
          需要學(xué)習(xí)的,如果沒加過鋒哥微信的
          加一下鋒哥微信備注?電商?即可獲取B站學(xué)習(xí)地址


          點(diǎn)個(gè)?在看?
          喜歡是一種感覺
          在看是一種支持
          ↘↘↘
          瀏覽 82
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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 | 国产豆花一区二区三区 | 亚洲三级片无码高清 | 久热思思| 九九九九在免费 |