IDEA插件的开发方法是什么
这篇文章主要讲解了"IDEA插件的开发方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"IDEA插件的开发方法是什么"吧!
最近我在 IDEA 插件发现了一个有趣的项目 StopCoding 停止代码编写,思路十分的简单。今天,我就借助这个项目及 EOS 插件的相关开发经验,为大家介绍下 IDEA 插件开发的相关操作。
<1> intelliJDEA与intelliJ Platform
IntelliJ IDEA 简称 IDEA,是 Jetbrains 公司旗下的一款 JAVA 开发工具,支持 Java、Scala、Groovy 等语言的开发,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 应用的开发,提供了丰富的功能,智能代码助手、代码自动提示、重构、J2EE 支持、各类版本工具(git、svn等)、JUnit、CVS 整合、代码分析、 创新的 GUI 设计等。
IntelliJ Platform 是一个构建 IDE 的开源平台,基于它构建的 IDE 有 IntelliJ IDEA、WebStorm、DataGrip、以及 Android Studio 等等。IDEA 插件也是基于 IntelliJ Platform 开发的。
<2>开发环境搭建
官方开发文档 IntelliJ Platform SDK :
https://plugins.jetbrains.com/docs/intellij/welcome.html
开发工具使用 Intellij IDEA,下载地址:
https://www.jetbrains.com/idea/
IDEA 分为两个版本:
社区版(Community): 完全免费,代码开源,但是缺少一些旗舰版中的高级特性。
旗舰版(Ultimate): 30 天免费,支持全部功能,代码不开源。
开发 IDEA 的插件推荐使用社区版,因为社区版是开源的,在开发插件的时候,可以调试源代码。
<3>开发一个简单的插件
官方文档指导给出了两种开发方式:
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.gradle10└── src11├── main12│ ├── java13│ └── resources14│ └── META-INF15│ └── plugin.xml16└── test17 ├── java18 └── resources
根目录 build.gradle 配置内容如下:
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 910repositories {11 mavenCentral()12}13dependencies {14 testImplementation group: 'junit', name: 'junit', version: '4.12'15}1617// See https://github.com/JetBrains/gradle-intellij-plugin/18intellij {19 version '2020.1'20}21patchPluginXml {22 changeNotes """23 Add change notes here.
24 most HTML tags may be usedem>"""25}
Gradle 类型工程 Running 方式:
推荐使用 gradle 方式开发插件,gradle 方式对本地环境要求较低,不需要去配置复杂的 sdk 等相关内容。
2.DevKit开发模式
启用 Plugin DevKit
Plugin DevKit 是 IntelliJ 的一个插件,它使用 IntelliJ IDEA 自己的构建系统来为开发 IDEA 插件提供支持。开发 IDEA 插件之前需要安装并启用 Plugin DevKit 。
打开 IDEA,导航到 Settings | Plugins,若插件列表中没有 Plugin DevKit,点击 Install JetBrains plugin,搜索并安装。
配置 IntelliJ Platform Plugin SDK
导航到 File | Project Structure,选择对话框左侧栏 Platform Settings 下的 SDKs
点击 + 按钮,先选择 JDK,指定 JDK 的路径;再创建 IntelliJ Platform Plugin SDK,指定 home path 为 IDEA 的安装路径,如图:
这里示例用官方 action 增加一个简单的 action 作为示例,原地址如下:
https://plugins.jetbrains.com/docs/intellij/working-with-custom-actions.html#developing-the-anaction-methods
1、定义action
定义一个 Java class,继承 AnAction 类,并重写 actionPerformed 方法, 如:
1 public class PopupDialogAction extends AnAction {2 @Override3 public void actionPerformed(@NotNull AnActionEvent event) {4// Using the event, create and show a dialog5 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、注册 Action
在 plugin.xml 文件的 元素内注册。
1id="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 text place="MainMenu" text="Pop Dialog Action"/> 5 6 first-keystroke="control alt A" second-keystroke="C" keymap="$default"/> 7 8 keystroke="control button3 doubleClick" keymap="$default"/> 910 to-group group-id="ToolsMenu" anchor="first"/>1112
上面示例会定义一个被添加到 IDEA tools 菜单的第一个位置(anchor="first")添加了"Pop Dialog Action"菜单,点击该菜单将弹出一个"Action Basics Plugin: Pop Dialog Action Selected!" item,如图:
点击该 "Pop Dialog Action" item,弹出一个提示输入名字的对话框。
<4>StopCoding原理及源码解析
开源地址:
https://github.com/jogeen/StopCoding.git
Step1. 然后在菜单栏中tools->StopCoding。
Step2. 设置适合你的参数然后保存。
Step3. 快乐的Coding,再不用担心自己会"沉迷"了。工作时间结束,就会弹出下框进行提醒。当然,这个框是关不掉的。 只有你休息了足够的时间它才会自动关闭。
工程结构分析:
1. 2├── image 3│ ├── step1.png 4│ ├── step2.png 5│ ├── step3.png 6│ └── step.gif 7├── LICENSE 8├── readme.md 9├── readme_ZH.md10├── resources11│ ├── img12│ │ └── stop.png13│ └── META-INF14│ ├── pluginIcon_dark.svg15│ ├── pluginIcon.svg16│ └── plugin.xml17├── src18│ └── icu19│ └── jogeen20│ └── stopcoding21│ ├── data22│ │ ├── DataCenter.java23│ │ └── SettingData.java24│ ├── service25│ │ └── TimerService.java26│ ├── StopCodingSettingAction.java27│ ├── task28│ │ ├── RestTask.java29│ │ └── WorkTask.java30│ └── ui31│ ├── SettingDialog.form32│ ├── SettingDialog.java33│ ├── TipsDialog.form34│ └── TipsDialog.java35└── StopCoding.iml
上图可以看到,工程结构十分的简单,基于devkit模式进行开发。
data 包 SettingData,配置信息对应 model。DataCenter,作为运行时的数据中心,都是些静态的全局变量。
service TimerService 这个定时计算的核心代码。
task RestTask 休息时的定时任务。WorkTask 工作时的定时任务。
ui SettingDialog 设置信息的对话框。TipsDialog 休息时提醒的对话框。StopCodingSettingAction 启动入口的 action。
plugin.xml 这是插件工程的核心配置文件,里面每一项的都添加了详细的注释,有疑问的小伙伴可以在公众号后台留言,我们一起探讨。
12 4 icu.jogeen.StopCoding.id 5 6 7StopCoding 8 9101.2.1 11 1213jogeen 1415 1617This 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 healthily20 3435 3721
25- In the tools menu bar, open stopcoding.
22- Set working hours and rest time, and save them.
23- 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.
24
26如果你也经常沉迷于写代码,忘了起身休息喝水,那么试试这个插件吧
2728
32 33 ]]>- 在菜单栏的Tools中,打开StopCoding插件进行设置
29- 设置工作时间和休息时间,并且保存
30- 当设置的时间一到,就会有弹框提醒你休息,让你暂时不能操作idea
3139 4546 47V1.2 add icon(Thanks for the icon provided by my good friend Hu Wei). 40V1.1 update Guide to use. 41V1.0 release. 42 43 ]]>4448 49 com.intellij.modules.lang 50515253 5455 5657 5859 656661 6462 63
从 public.xml 可以看出,这个插件比较简单,只有一个 StopCoding_setting_id 配置项,入口类也是
icu.jogeen.stopcoding.StopCodingSettingAction
1 public class StopCodingSettingAction extends AnAction {23 @Override4 public void actionPerformed(AnActionEvent e) {5 SettingDialog settingDialog = new SettingDialog();6 settingDialog.setVisible(true);7 }8 }
源码中只是展示了SettingDialog,基于Swing画了一个可视化界面。
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 //绑定关闭按钮事件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 //绑定启用选择按钮时间26 openRbtn.addChangeListener(new ChangeListener() {27 @Override28 public void stateChanged(ChangeEvent e) {29 openRbtn.setText(openRbtn.isSelected() ? "Running" : "Stopped");30 }31 });
在 SettingDialog 中对事件进行了监听,其主要思路就是 schedule 去添加一个定时任务,和使用 cancel 去取消任务停止定时器。然后弹出一个 dialog 阻止持续 coding。
感谢各位的阅读,以上就是"IDEA插件的开发方法是什么"的内容了,经过本文的学习后,相信大家对IDEA插件的开发方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!