千家信息网

IDEA插件的开发方法是什么

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要讲解了"IDEA插件的开发方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"IDEA插件的开发方法是什么"吧!最近我在 IDEA 插
千家信息网最后更新 2024年09月22日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 文件的 元素内注册。

 1  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   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 这是插件工程的核心配置文件,里面每一项的都添加了详细的注释,有疑问的小伙伴可以在公众号后台留言,我们一起探讨。

 1 2  4  icu.jogeen.StopCoding.id 5   6 7  StopCoding 8   910  1.2.111  1213  jogeen1415  1617  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

20
    21
  1. In the tools menu bar, open stopcoding.
  2. 22
  3. Set working hours and rest time, and save them.
  4. 23
  5. 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.
  6. 24
25
26

如果你也经常沉迷于写代码,忘了起身休息喝水,那么试试这个插件吧

27
    28
  1. 在菜单栏的Tools中,打开StopCoding插件进行设置
  2. 29
  3. 设置工作时间和休息时间,并且保存
  4. 30
  5. 当设置的时间一到,就会有弹框提醒你休息,让你暂时不能操作idea
  6. 31
32

项目地址:https://github.com/jogeen/StopCoding

33 ]]>
3435 37 39
  • V1.2 add icon(Thanks for the icon provided by my good friend Hu Wei).
  • 40
  • V1.1 update Guide to use.
  • 41
  • V1.0 release.
  • 42 43 ]]>44
    4546 47 48 49 com.intellij.modules.lang505152 53 5455 5657 58 59 61 62 63 64 6566

    从 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插件的开发方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    0