您好,登錄后才能下訂單哦!
這篇文章主要講解了“IDEA插件的開(kāi)發(fā)方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“IDEA插件的開(kāi)發(fā)方法是什么”吧!
最近我在 IDEA 插件發(fā)現(xiàn)了一個(gè)有趣的項(xiàng)目 StopCoding 停止代碼編寫(xiě),思路十分的簡(jiǎn)單。今天,我就借助這個(gè)項(xiàng)目及 EOS 插件的相關(guān)開(kāi)發(fā)經(jīng)驗(yàn),為大家介紹下 IDEA 插件開(kāi)發(fā)的相關(guān)操作。
IntelliJ IDEA 簡(jiǎn)稱(chēng) IDEA,是 Jetbrains 公司旗下的一款 JAVA 開(kāi)發(fā)工具,支持 Java、Scala、Groovy 等語(yǔ)言的開(kāi)發(fā),同時(shí)具備支持目前主流的技術(shù)和框架,擅長(zhǎng)于企業(yè)應(yīng)用、移動(dòng)應(yīng)用和 Web 應(yīng)用的開(kāi)發(fā),提供了豐富的功能,智能代碼助手、代碼自動(dòng)提示、重構(gòu)、J2EE 支持、各類(lèi)版本工具(git、svn等)、JUnit、CVS 整合、代碼分析、 創(chuàng)新的 GUI 設(shè)計(jì)等。
IntelliJ Platform 是一個(gè)構(gòu)建 IDE 的開(kāi)源平臺(tái),基于它構(gòu)建的 IDE 有 IntelliJ IDEA、WebStorm、DataGrip、以及 Android Studio 等等。IDEA 插件也是基于 IntelliJ Platform 開(kāi)發(fā)的。
官方開(kāi)發(fā)文檔 IntelliJ Platform SDK :
https://plugins.jetbrains.com/docs/intellij/welcome.html
開(kāi)發(fā)工具使用 Intellij IDEA,下載地址:
https://www.jetbrains.com/idea/
IDEA 分為兩個(gè)版本:
社區(qū)版(Community): 完全免費(fèi),代碼開(kāi)源,但是缺少一些旗艦版中的高級(jí)特性。
旗艦版(Ultimate): 30 天免費(fèi),支持全部功能,代碼不開(kāi)源。
開(kāi)發(fā) IDEA 的插件推薦使用社區(qū)版,因?yàn)樯鐓^(qū)版是開(kāi)源的,在開(kāi)發(fā)插件的時(shí)候,可以調(diào)試源代碼。
官方文檔指導(dǎo)給出了兩種開(kāi)發(fā)方式:
Gradle
DevKit
1.Gradle 方式新建工程
新建工程目錄如下:
1 my_gradle_plugin 2├── build.gradle 3├── gradle 4│ └── wrapper 5│ ├── gradle-wrapper.jar 6│ └── gradle-wrapper.properties 7├── gradlew 8├── gradlew.bat 9├── settings.gradle 10└── src 11├── main 12│ ├── java 13│ └── resources 14│ └── META-INF 15│ └── plugin.xml 16└── test 17 ├── java 18 └── resources
根目錄 build.gradle 配置內(nèi)容如下:
1plugins { 2 id 'java' 3 id 'org.jetbrains.intellij' version '0.6.5' 4} 5 6group 'com.your.company' 7version '1.0' 8sourceCompatibility = 1.8 9 10repositories { 11 mavenCentral() 12} 13dependencies { 14 testImplementation group: 'junit', name: 'junit', version: '4.12' 15} 16 17// See https://github.com/JetBrains/gradle-intellij-plugin/ 18intellij { 19 version '2020.1' 20} 21patchPluginXml { 22 changeNotes """ 23 Add change notes here.<br/> 24 <em>most HTML tags may be usedem>""" 25}
Gradle 類(lèi)型工程 Running 方式:
推薦使用 gradle 方式開(kāi)發(fā)插件,gradle 方式對(duì)本地環(huán)境要求較低,不需要去配置復(fù)雜的 sdk 等相關(guān)內(nèi)容。
2.DevKit開(kāi)發(fā)模式
啟用 Plugin DevKit
Plugin DevKit 是 IntelliJ 的一個(gè)插件,它使用 IntelliJ IDEA 自己的構(gòu)建系統(tǒng)來(lái)為開(kāi)發(fā) IDEA 插件提供支持。開(kāi)發(fā) IDEA 插件之前需要安裝并啟用 Plugin DevKit 。
打開(kāi) IDEA,導(dǎo)航到 Settings | Plugins,若插件列表中沒(méi)有 Plugin DevKit,點(diǎn)擊 Install JetBrains plugin,搜索并安裝。
配置 IntelliJ Platform Plugin SDK
導(dǎo)航到 File | Project Structure,選擇對(duì)話(huà)框左側(cè)欄 Platform Settings 下的 SDKs
點(diǎn)擊 + 按鈕,先選擇 JDK,指定 JDK 的路徑;再創(chuàng)建 IntelliJ Platform Plugin SDK,指定 home path 為 IDEA 的安裝路徑,如圖:
這里示例用官方 action 增加一個(gè)簡(jiǎn)單的 action 作為示例,原地址如下:
https://plugins.jetbrains.com/docs/intellij/working-with-custom-actions.html#developing-the-anaction-methods
1、定義action
定義一個(gè) Java class,繼承 AnAction 類(lèi),并重寫(xiě) actionPerformed 方法, 如:
1 public class PopupDialogAction extends AnAction { 2 @Override 3 public void actionPerformed(@NotNull AnActionEvent event) { 4// Using the event, create and show a dialog 5 Project currentProject = event.getProject(); 6 StringBuffer dlgMsg = new StringBuffer(event.getPresentation().getText() + " Selected!"); 7 String dlgTitle = event.getPresentation().getDescription(); 8 // If an element is selected in the editor, add info about it. 9 Navigatable nav = event.getData**(**CommonDataKeys.NAVIGATABLE); 10 if (nav != null) { 11 dlgMsg.append(String.format("nSelected Element: %s", nav.toString())); 12 } 13 Messages.showMessageDialog(currentProject, dlgMsg.toString(), dlgTitle, Messages.getInformationIcon());14 }15}
2、注冊(cè) Action
在 plugin.xml 文件的 元素內(nèi)注冊(cè)。
1 <action< span=""> id="org.intellij.sdk.action.PopupDialogAction" class="org.intellij.sdk.action.PopupDialogAction" 2 text="Action Basics Plugin: Pop Dialog Action" description="SDK action example" icon="SdkIcons.Sdk_default_icon"> 3 4 <override-< span="">text place="MainMenu" text="Pop Dialog Action"/> 5 6 <keyboard-shortcut< span=""> first-keystroke="control alt A" second-keystroke="C" keymap="$default"/> 7 8 <mouse-shortcut< span=""> keystroke="control button3 doubleClick" keymap="$default"/> 9 10 <add-< span="">to-group group-id="ToolsMenu" anchor="first"/> 11 12 </action>
上面示例會(huì)定義一個(gè)被添加到 IDEA tools 菜單的第一個(gè)位置(anchor=”first”)添加了”P(pán)op Dialog Action”菜單,點(diǎn)擊該菜單將彈出一個(gè)“Action Basics Plugin: Pop Dialog Action Selected!” item,如圖:
點(diǎn)擊該 “Pop Dialog Action” item,彈出一個(gè)提示輸入名字的對(duì)話(huà)框。
開(kāi)源地址:
https://github.com/jogeen/StopCoding.git
Step1. 然后在菜單欄中tools->StopCoding。
Step2. 設(shè)置適合你的參數(shù)然后保存。
Step3. 快樂(lè)的Coding,再不用擔(dān)心自己會(huì)“沉迷”了。工作時(shí)間結(jié)束,就會(huì)彈出下框進(jìn)行提醒。當(dāng)然,這個(gè)框是關(guān)不掉的。 只有你休息了足夠的時(shí)間它才會(huì)自動(dòng)關(guān)閉。
工程結(jié)構(gòu)分析:
1. 2├── image 3│ ├── step1.png 4│ ├── step2.png 5│ ├── step3.png 6│ └── step.gif 7├── LICENSE 8├── readme.md 9├── readme_ZH.md 10├── resources 11│ ├── img 12│ │ └── stop.png 13│ └── META-INF 14│ ├── pluginIcon_dark.svg 15│ ├── pluginIcon.svg 16│ └── plugin.xml 17├── src 18│ └── icu 19│ └── jogeen 20│ └── stopcoding 21│ ├── data 22│ │ ├── DataCenter.java 23│ │ └── SettingData.java 24│ ├── service 25│ │ └── TimerService.java 26│ ├── StopCodingSettingAction.java 27│ ├── task 28│ │ ├── RestTask.java 29│ │ └── WorkTask.java 30│ └── ui 31│ ├── SettingDialog.form 32│ ├── SettingDialog.java 33│ ├── TipsDialog.form 34│ └── TipsDialog.java 35└── StopCoding.iml
上圖可以看到,工程結(jié)構(gòu)十分的簡(jiǎn)單,基于devkit模式進(jìn)行開(kāi)發(fā)。
data 包 SettingData,配置信息對(duì)應(yīng) model。DataCenter,作為運(yùn)行時(shí)的數(shù)據(jù)中心,都是些靜態(tài)的全局變量。
service TimerService 這個(gè)定時(shí)計(jì)算的核心代碼。
task RestTask 休息時(shí)的定時(shí)任務(wù)。WorkTask 工作時(shí)的定時(shí)任務(wù)。
ui SettingDialog 設(shè)置信息的對(duì)話(huà)框。TipsDialog 休息時(shí)提醒的對(duì)話(huà)框。StopCodingSettingAction 啟動(dòng)入口的 action。
plugin.xml 這是插件工程的核心配置文件,里面每一項(xiàng)的都添加了詳細(xì)的注釋?zhuān)幸蓡?wèn)的小伙伴可以在公眾號(hào)后臺(tái)留言,我們一起探討。
1<idea-plugin> 2 <!-- 插件唯一id,不能和其他插件項(xiàng)目重復(fù),所以推薦使用com.xxx.xxx的格式 3 插件不同版本之間不能更改,若沒(méi)有指定,則與插件名稱(chēng)相同 --> 4 <id>icu.jogeen.StopCoding.id</id> 5 <!-- 插件名稱(chēng),別人在官方插件庫(kù)搜索你的插件時(shí)使用的名稱(chēng) --> 6 7 <name>StopCoding</name> 8 <!-- 插件版本號(hào) --> 9 10 <version>1.2.1</version> 11 <!-- 供應(yīng)商主頁(yè)和email(不能使用默認(rèn)值,必須修改成自己的)--> 12 13 <vendor email="jogeen@qq.com" url="https://github.com/jogeen/StopCoding">jogeen</vendor> 14 15 <!-- 插件的描述 (不能使用默認(rèn)值,必須修改成自己的。并且需要大于40個(gè)字符)--> 16 17 <description><![CDATA[ 18 <p>This is a work timer.It can set every working period to remind you that it's time to have a rest, drink some water and exercise your body. 19 Only in this way can you really work healthily</p> 20 <ol> 21 <li>In the tools menu bar, open stopcoding.</li> 22 <li>Set working hours and rest time, and save them.</li> 23 <li>When the set time comes, there will be a pop-up box to remind you to rest, so that you can not operate idea temporarily.</li> 24 </ol> 25 <hr> 26 <p>如果你也經(jīng)常沉迷于寫(xiě)代碼,忘了起身休息喝水,那么試試這個(gè)插件吧</p> 27 <ol> 28 <li>在菜單欄的Tools中,打開(kāi)StopCoding插件進(jìn)行設(shè)置</li> 29 <li>設(shè)置工作時(shí)間和休息時(shí)間,并且保存</li> 30 <li>當(dāng)設(shè)置的時(shí)間一到,就會(huì)有彈框提醒你休息,讓你暫時(shí)不能操作idea</li> 31 </ol> 32 <p>項(xiàng)目地址:<a href="https://github.com/jogeen/StopCoding">https://github.com/jogeen/StopCoding</p> 33 ]]></description> 34 35 <!-- 插件版本變更信息,支持HTML標(biāo)簽; 36 將展示在 settings | Plugins 對(duì)話(huà)框和插件倉(cāng)庫(kù)的Web頁(yè)面 --> 37 <change-notes><![CDATA[ 38 <ul> 39 <li>V1.2 add icon(Thanks for the icon provided by my good friend Hu Wei).</li> 40 <li>V1.1 update Guide to use.</li> 41 <li>V1.0 release.</li> 42 </ul> 43 ]]> 44 </change-notes> 45 46 <!-- 插件兼容IDEAbuild 號(hào)(最低版本號(hào))--> 47 <idea-version since-build="173.0"/> 48 <!-- 插件所依賴(lài)的其他插件的id --> 49 <depends>com.intellij.modules.lang</depends> 50 51 52 <extensions defaultExtensionNs="com.intellij"> 53 <!-- 聲明該插件對(duì)IDEA core或其他插件的擴(kuò)展 --> 54 55 </extensions> 56 57 <!-- 編寫(xiě)插件動(dòng)作 --> 58 <actions> 59 <action id="StopCoding_setting_id" class="icu.jogeen.stopcoding.StopCodingSettingAction" text="StopCoding" 60 description="setting"> 61 <add-to-group group-id="ToolsMenu" anchor="first"/> 62 <keyboard-shortcut keymap="$default" first-keystroke="ctrl S" second-keystroke="C"/> 63 </action> 64 </actions> 65 66</idea-plugin>
從 public.xml 可以看出,這個(gè)插件比較簡(jiǎn)單,只有一個(gè) StopCoding_setting_id 配置項(xiàng),入口類(lèi)也是
icu.jogeen.stopcoding.StopCodingSettingAction
1 public class StopCodingSettingAction extends AnAction { 2 3 @Override 4 public void actionPerformed(AnActionEvent e) { 5 SettingDialog settingDialog = new SettingDialog(); 6 settingDialog.setVisible(true); 7 } 8 }
源碼中只是展示了SettingDialog,基于Swing畫(huà)了一個(gè)可視化界面。
icu.jogeen.stopcoding.ui.SettingDialog
1//綁定確定按鈕事件 2 buttonOK.addActionListener(new ActionListener() { 3 public void actionPerformed(ActionEvent e) { 4 onOK(); 5 } 6 }); 7 //綁定取消按鈕事件 8 buttonCancel.addActionListener(new ActionListener() { 9 public void actionPerformed(ActionEvent e) { 10 onCancel(); 11 } 12 }); 13 //綁定關(guān)閉按鈕事件 14 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 15 addWindowListener(new WindowAdapter() { 16 public void windowClosing(WindowEvent e) { 17 onCancel(); 18 } 19 }); 20 contentPane.registerKeyboardAction(new ActionListener() { 21 public void actionPerformed(ActionEvent e) { 22 onCancel(); 23 } 24 }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 25 //綁定啟用選擇按鈕時(shí)間 26 openRbtn.addChangeListener(new ChangeListener() { 27 @Override 28 public void stateChanged(ChangeEvent e) { 29 openRbtn.setText(openRbtn.isSelected() ? "Running" : "Stopped"); 30 } 31 });
在 SettingDialog 中對(duì)事件進(jìn)行了監(jiān)聽(tīng),其主要思路就是 schedule 去添加一個(gè)定時(shí)任務(wù),和使用 cancel 去取消任務(wù)停止定時(shí)器。然后彈出一個(gè) dialog 阻止持續(xù) coding。
感謝各位的閱讀,以上就是“IDEA插件的開(kāi)發(fā)方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)IDEA插件的開(kāi)發(fā)方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。