轩辕李的博客 轩辕李的博客
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

轩辕李

勇猛精进,星辰大海
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java

  • Spring

  • 其他语言

  • 工具

    • 从Eclipse到IDEA,金字塔到太空堡垒
    • 开发自己的IDEA插件
      • 插件开发准备工作
        • 安装 IntelliJ IDEA
        • 学习 IntelliJ Platform SDK 文档
      • 创建插件项目
        • 新建插件项目
        • 配置插件项目
        • 插件项目结构
      • 插件开发基础
        • 编写插件代码
        • 注册插件功能
        • 打包与发布插件
      • 插件开发实践与技巧
        • 了解IntelliJ Platform SDK的API
        • 参考其他插件的源代码
        • 内置插件的应用
        • 使用调试功能
        • 优化插件性能
        • 关注用户体验
        • LivePlugin
      • 总结
    • Maven实战
    • Git使用技巧
  • 后端
  • 工具
轩辕李
2022-04-01
目录

开发自己的IDEA插件

IntelliJ IDEA对于Java开发者来说是一款友好且强大的集成开发环境(IDE)。
IntelliJ IDEA提供了丰富的插件扩展,可以帮助开发者在不同的场景下提高生产力。
在工具篇中我介绍IDEA的常用操作,不过当你使用了自己的基础框架,这时候就需要自定义的插件了。
本文将详细介绍IDEA插件开发的过程和技巧,帮助你快速入门IDEA插件开发。

# 插件开发准备工作

# 安装 IntelliJ IDEA

为了进行插件开发,你需要安装IntelliJ IDEA。你可以选择社区版(免费)或者旗舰版(收费)。插件开发主要依赖于IntelliJ Platform SDK,这个SDK在社区版和旗舰版中都包含。

下载地址:Download (opens new window)

# 学习 IntelliJ Platform SDK 文档

IntelliJ Platform SDK文档是学习插件开发的重要资源。你可以在JetBrains官方网站找到相关文档:Docs (opens new window)

这里包含了插件开发的基础知识、插件项目结构、API使用示例等内容。强烈建议你在开始插件开发前通读相关文档。

# 创建插件项目

# 新建插件项目

打开IntelliJ IDEA,选择File > New > Project。在新建项目的对话框中,选择IntelliJ Platform Plugin,然后点击Next。

# 配置插件项目

在项目配置页面,你需要输入插件的基本信息,包括插件名称、存储位置等。在SDK选项中,选择之前配置好的IntelliJ Platform Plugin SDK。

# 插件项目结构

创建好插件项目后,你可以看到以下目录结构:

  • src: 插件源代码目录
  • resources: 插件资源文件目录,包括图标、本地化资源等
  • META-INF: 插件元数据目录
  • plugin.xml: 插件描述文件,包含插件的基本信息、功能扩展点、依赖等信息

# 插件开发基础

# 编写插件代码

插件的核心代码位于src目录下。你可以根据需求创建Java或Kotlin类,实现插件的功能。

通常,一个插件需要实现以下几种类:

  • Action类:用于执行插件功能的主要代码,通常继承自AnAction类。
  • Editor类:用于实现代码编辑器相关的功能,如代码高亮、自动补全等。
  • ToolWindow类:用于实现工具窗口相关的功能,如显示插件的配置面板等。

在编写插件代码时,你可以使用IntelliJ Platform SDK提供的丰富API。这些API涵盖了IntelliJ IDEA的各种功能,如项目管理、文件操作、代码编辑等。

# 注册插件功能

在plugin.xml文件中,你需要注册插件的各种功能。主要包括以下几种类型的注册:

  • <action>:注册插件的Action类,指定类名、菜单项文本、快捷键等属性。
  • <editor>:注册插件的Editor类,指定类名、语言支持等属性。
  • <toolWindow>:注册插件的ToolWindow类,指定类名、窗口标题等属性。

# 打包与发布插件

插件开发完成后,你需要将插件打包为一个.jar文件,以便用户安装和使用。你可以使用IntelliJ IDEA的Build > Build Artifacts命令进行打包。

打包完成后,你可以将插件发布到JetBrains Plugin Repository (opens new window)。用户可以在这个仓库中搜索、下载和安装插件。

# 插件开发实践与技巧

# 了解IntelliJ Platform SDK的API

熟练使用IntelliJ Platform SDK的API是插件开发的关键。你应该深入了解SDK提供的各种类和方法,以便在实际开发中快速找到合适的API。

# 参考其他插件的源代码

阅读和分析其他插件的源代码是学习插件开发的好方法。你可以在GitHub或JetBrains Plugin Repository中找到许多开源插件,这些插件涵盖了不同的功能和技术领域,可以为你的插件开发提供灵感和借鉴。

# 内置插件的应用

IDEA本身提供了丰富的内置插件,这些插件支撑了IDEA的强大功能。
比如Freemarker插件、Spring插件、JSP插件等。但是这些插件的API不显于官方文档之中,如果你要用到其中的PsiElement或PsiFile的实现,是让人困扰的。
这里没有什么好办法,先把Platform SDK基础阅读一遍,然后根据实际进行调试,才能对他们进行娴熟的应用。

# 使用调试功能

IntelliJ IDEA提供了丰富的调试功能,可以帮助你快速定位和解决插件中的问题。在开发插件时,你应该充分利用调试功能,如设置断点、查看变量值、执行表达式等

# 优化插件性能

插件的性能对用户体验至关重要。在开发插件时,你应该关注性能优化,确保插件在各种场景下都能运行得足够快。一些性能优化技巧包括:

  • 减少不必要的计算:避免在插件中进行大量重复或无用的计算。可以考虑使用缓存、延迟加载等技术来减轻计算负担。
  • 异步处理:避免在主线程中执行耗时操作,以免阻塞用户界面。可以使用IntelliJ Platform SDK提供的异步API(如Application.invokeLater()、Application.executeOnPooledThread()等)进行后台处理。
  • 分析性能瓶颈:使用IntelliJ IDEA自带的性能分析工具(如CPU Profiler、Memory Profiler等)找出插件中的性能瓶颈,并进行针对性优化。

# 关注用户体验

良好的用户体验是插件成功的关键。在开发插件时,你应该关注以下几个方面的用户体验:

  • 易用性:插件的功能应该容易上手,用户能够快速理解和使用。你可以通过设计简洁的界面、提供详细的帮助文档等方式提高插件的易用性。
  • 可配置性:插件应该允许用户根据自己的需求进行配置。你可以在插件中提供配置界面,让用户自定义插件的行为、外观等属性。
  • 反馈与支持:插件应该提供充分的反馈信息,帮助用户了解插件的运行状态。同时,你应该为插件提供良好的支持,如及时回应用户问题、修复bug等。

# LivePlugin

LivePlugin是一种IntelliJ IDEA插件,它允许您在应用程序运行时编写和运行Groovy脚本。具体来说,它为您提供了一个面板,您可以在其中编写脚本,并在IDEA中运行它们,而无需停止和重新启动应用程序。

通过使用LivePlugin,您可以更轻松地对应用程序进行实验和调试,因为您可以立即在应用程序中测试和执行脚本,而无需在应用程序中重新编译和构建代码。

此外,LivePlugin还支持自定义工具栏按钮和快捷键,以便更轻松地执行脚本和其他操作。

但是这个LivePlugin的使用也会用到IntelliJ Platform SDK API,所以需要你对插件体系有一个基础认知。

下面是一个把width替换为style的示例,主要解决的问题是旧项目中td使用了过期属性width,要快捷替换为style width:

package width2style

import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.editor.SelectionModel

import static liveplugin.PluginUtil.*

registerAction("width2style","ctrl alt Q", "EditorPopupMenu","width2style") { AnActionEvent event ->
    def project = event?.project
    def editor = CommonDataKeys.EDITOR.getData(event.dataContext)
    if (project == null || editor == null) return

    // 获取选中的文本
    SelectionModel selectionModel = editor.getSelectionModel();
    String selectedText = selectionModel.getSelectedText();

    String searchText = 'width="([^"]*)"'
    String replacementText = 'style="width:$1;"'
    String replacedText = selectedText.replaceAll(searchText,replacementText)

    int start = selectionModel.getSelectionStart();
    int end = selectionModel.getSelectionEnd();

    // Document modifications must be done inside "commands" which will support undo/redo functionality.
    runDocumentWriteAction(event.project, editor.document, "width2style") { document ->
        // 用替换后的文本更新选中的内容
        document.replaceString(start, end, replacedText);
    }

}

可以看到,LivePlugin提供了注册Action的便捷方式,闭包中的代码就是实现功能的代码。

LivePlugin适合编写轻量级的IDEA插件。

# 总结

IntelliJ IDEA插件开发是一个有趣且具有挑战性的领域,它可以帮助你更深入地了解IntelliJ IDEA这款强大的开发工具,并为其他开发者提供有价值的功能。

通过学习本文的知识和技巧,你应该能够迅速入门IDEA插件开发,掌握插件项目的创建、编写、调试、发布等全过程。

希望你能在插件开发的道路上取得成功,为IntelliJ IDEA的生态贡献力量。

祝你变得更强!

编辑 (opens new window)
#IDEA插件
上次更新: 2023/06/14
从Eclipse到IDEA,金字塔到太空堡垒
Maven实战

← 从Eclipse到IDEA,金字塔到太空堡垒 Maven实战→

最近更新
01
Spring Boot版本新特性
09-15
02
Spring框架版本新特性
09-01
03
Spring Boot开发初体验
08-15
更多文章>
Theme by Vdoing | Copyright © 2018-2025 京ICP备2021021832号-2 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式