概要

工欲善其事必先利其器,虽然IntelliJ IDEA的功能已经足够的强大,但是也无法满足开发人员想要的一切功能。对于此,IDEA提供了API接口供开发者进行插件开发扩展,但目前来说,网上对于IDEA插件开发的文档大多讲的不是很清楚,自己最近也开发了一个IDEA插件,中间踩了不少坑,在此总结下。

一般来说,开发人员开发的IntelliJ平台插件主要分为如下几类:

  • 自定义编程语言的支持:包括语法高亮、文件类型识别、代码格式化、代码查看和自动补全等等。这类插件包括.gitignore,.shell这些。
  • 框架继承:其实就是类似基于IntelliJ开发出另一个IDEA,比如AndroidStudio就是通过将Android SDK整合到了IntelliJ IDEA当中。比如还可以将Spring、Struts等框架集成到IDEA中,方便用户在IDEA使用使用特定的框架更加的方便
  • 工具集成:对于IDEA定制一些个性化或者是实用的工具,比如lombok和translation插
  • 附加UI:对于标准的UI界面进行修改,如在编辑框中加入一个背景图片等等。

IDEA中提供的用于进行插件开发的接口非常多,本文主要介绍几个开发时常见的接口和类。

创建plugin工程

目前来说,IDEA插件开发有两种模式,第一种是直接在IDEA中创建插件开发的项目,第二种是使用Gradle来构建Intellij插件。下面两种方式都会介绍下:

IDEA中新建plugin项目

创建plugin项目:

  • 在创建项目时选择IntelliJ Platform Plugin
  • Project SDK需要选择插件开发特有的SDK(注意不是JDK),没有相应的SDK需要new一个
  • 可以根据自己需要开发的插件选择相应的库和框架

这时就完成了插件项目的创建,如下所示:

可以看到创建出的project非常的简单,仅在META-INF文件夹中有一个plugin.xml配置文件~plugin.xml配置文件会在后面具体介绍。

使用Gradle来构建Intellij插件

Gradle的好处就不多说了,已经完全占领了Android的构建编译。使用Gradle来构建Intellij插件需要添加官方的插件支持。

首选需要创建一个Gradle项目:

创建好的Gradle项目中会出现一堆与Gradle相关的文件夹和文件,这个时候只需要关注build.gradle即可。

这时我们需要在build.gradle中新增相关的依赖,让项目能够支持构建IDEA插件。步骤如下:

1.添加 IntelliJ build plugins仓库地址

plugins { id 'org.jetbrains.intellij' version '0.3.1'
}

2.使用IntelliJ IDEA的插件

apply plugin: "org.jetbrains.intellij"
apply plugin: 'java'
apply plugin: 'idea'

3.设置运行插件的IntelliJ的版本以及沙箱地址

intellij { version = '2017.3' //调试我们插件的版本 sandboxDirectory = project.rootDir.canonicalPath + "/.sandbox" //插件生成的临时文件的地址,可以省略
}

设置好了后,登陆Gradle构建成功即可

4.需要在resources目录下新建META-INF/plugin.xml文件。即完成了插件项目的构建

两种创建方式的差异

项目本身的差异

  • SDK的差异:

    • 使用IDEA创建的插件项目中SDK为 IDEA插件专用的SDK
    • 使用Gradle编译的插件项目SDK为 JDK
  • IDEA.iml文件中type不同
    • 使用IDEA创建的插件项目中xxx.iml中type为PLUGIN_MODULE
    • 使用Gradle编译的插件项目中xxx.iml中type为JAVA_MODULE

运行方式的差异

1.对于IDEA创建的插件项目在运行时需要创建一个plugin的运行方式,如下图所示:

创建好了后需要配置两个参数,如下所示:

  • Use classpath of module:选择当前的module即可,这里需要注意如果xxx.iml文件中type不为PLUGIN_MODULE那么这里将会找不到该MODULE,会报Run Configuration Error: No plugin module specified for configuration错误

2.对于使用Gradle编译的插件项目,需要创建gradle的运行方式,如下图所示:

创建好后参数配置为:

选择相应的project,Tasks为 :runIde

plugin.xml

IDEA插件的工程创建完毕后,都会在META目录下创建一个plugin.xml文件,对Android开发比较熟悉的同学可以将它理解为AndroidMainFest.xml,里面定义了一些组件、事件等需要注册的内容。

一个新创建好的项目中plugin.xml的内容为:

?xml version="1.0" encoding="UTF-8"?>
<idea-plugin> <id>com.your.company.unique.plugin.id</id> <name>Plugin display name here</name> <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor><version>1.0.0</version> <description><![CDATA[ Enter short description for your plugin here.<br> <em>most HTML tags may be used</em> ]]></description> <category>Tools Integration</category> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html on how to target different products --> <!-- uncomment to enable plugin in all products <depends>com.intellij.modules.lang</depends> --><!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> <idea-version since-build="162.00"/> <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions> <actions> <!-- Add your actions here --> </actions> <change-notes><![CDATA[ ]]> </change-notes> </idea-plugin>

在这里说明下上面的 plugin.xml 中出现的几个名词

  • id:表示当前插件的唯一id号
  • name:插件的名称
  • version:插件的版本号
  • vendor:填写开发人的邮箱,公司名称
  • description:插件的描述,如果将插件上传到IDEA的仓库后,在进行下载的时候就会显示该描述
  • idea-version:表示当前插件所支持的所有Intellij Idea 的版本, 详细信息可以参照这个对应关系
  • extensions:这里一般会放一些我们自己的扩展的东西,比如新增高亮显示,新增语言支持都是需要在这里进行扩展
  • actions:新增的Action类需要在这里注册,用于菜单栏扩展
<application-components> <component> <implementation-class>com.test.Application</implementation-class> </component> </application-components> <project-components> <component> <implementation-class>com.test.Project</implementation-class> </component> </project-components><module-components> <component> <implementation-class>com.test.Module</implementation-class> </component> </module-components>

插件里有三个可选的组建可以创建, 他们分别是Application level components,Project level components,Module level components.

这3个组件的相应实现类需要分别实现ApplicationComponent接口、ProjectComponent接口和ModuleComponent接口,分别需要实现相应的initComponent()和disposeComponent()方法

  1. Application level components 是在 IDE 启动的时候被创建和初始化的.
  2. Project level components 对应的是 IDE 里的每个工程项目 (没有被打开的工程也是会可能会创建 Project 实例的).
  3. Module level components 对应的是 Project 里的每个 Module.

需要注意的是, Application 级别的 initComponent 只会执行一次, Project 和 Module 级别的 init 和 Dispose 函数会根据项目工程的变化而被多次调用

IntelliJ IDEA插件开发指南(一)相关推荐

  1. IntelliJ IDEA插件开发指南(二)

    概要 上节中详细聊了下IDEA插件的创建以及plugin.xml的具体含义.本节来聊聊IDEA提供的插件开发关键类,IDEA中提供的用于进行插件开发的接口非常多,本章主要介绍几个开发时常见的接口和类. ...

  2. Hyperic HQ HQU 插件开发指南

    推荐 由Hyperic HQ 国内独家代理商北京铸锐数码科技有限公司提供.适用于Hyperic HQ开发人员,不但讲述了什么是HQU,如何开发Hyperic HQU插件还提供了示例.是Hyperic ...

  3. BurpSuite插件开发指南之 Java 篇

    Her0in · 2016/05/27 16:53 此文接着 <BurpSuite插件开发指南之 API 下篇> .在此篇中将会介绍如何使用Java 开发 BurpSuite 的插件,重点 ...

  4. linux gret 文件内容,DataX插件开发指南.docx

    Linux公社(LinuxlDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种 广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxlDC就是关于Linux的数 ...

  5. 奇舞周刊第 424 期:Sketch 插件开发指南

    记得点击文章末尾的" 阅读原文 "查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ Sketch 插件开发指南 众所周知,Sketch 是 UED 设计工具,大多 ...

  6. Qt Plugin插件开发指南(1)- 一般开发流程

    Qt Plugin插件开发指南(1)- 一般开发流程 Date Author Version Note 2020.02.17 Dog Tao V1.0 整理后发表. 2020.12.10 Dog Ta ...

  7. android 小插件开发,Android Gradle 插件开发指南

    原标题:Android Gradle 插件开发指南 2018安卓巴士全球开发者论坛-成都站 安卓巴士全球开发者论坛成都站即将开启! 作为Android开发者,你可能见过无数个apply plugin: ...

  8. gstreamer插件开发指南(一)

    翻译自:https://gstreamer.freedesktop.org/documentation/plugin-development/index.html 1 简介 GStreamer是一个非 ...

  9. IntelliJ IDEA插件开发入门教程(一)

    插件开发环境配置 IDEA分为社区版(Community Edition)和旗舰版(Ultimate Edition) 社区版:完全免费,代码开源,但是缺少一些旗舰版中的高级特性. 旗舰版:30天免费 ...

最新文章

  1. Android --- BaseQuickAdapter 子控件设置了addOnClickListener(R.id.xxx);点击的时候还是没反应
  2. maven 项目报错Context initialization failed
  3. QT的QPair类的使用
  4. java魔法堂_Java魔法堂:调用外部程序
  5. 机器学习(三十一)——Linear Discriminant Analysis
  6. 使用.Net Core实现FNV分布式hash一致性算法
  7. 2018NOIP普及组初赛解析
  8. golang 排序_堆 堆排序 优先队列 图文详解(Golang实现)
  9. OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
  10. Gstreamer的一些基本概念与A/V同步分析
  11. OGRE粒子系统简介
  12. HDU1556 Color the ball【差分数组+线段树】
  13. 频率单位Hz、MHz、GHz、THz、PHz、EHz换算关系
  14. C语言程序设计 循环结构程序设计
  15. 超小白教程之快速排序
  16. 360校招笔试题(C++小明买菜)
  17. 欠阻尼二阶系统的单位阶跃响应分析
  18. Karl Guttag:谈MicroLED AR光学难点,Mojo Vision还有很多问题
  19. python图片内容识别_TensorFlow从1到2(五)图片内容识别和自然语言语义识别
  20. TP-WR842N虚拟服务器设置,TP-Link WR842N无线路由器怎么设置无线桥接

热门文章

  1. 浅谈Linux内核无锁编程原理
  2. 今日头条推荐算法原理全文详解之四
  3. 专项测试之Web测试
  4. 零基础入门智能射频——偶极子天线等效电路模型分析
  5. 有道云笔记无法同步,网易云音乐无法登入
  6. git定位追踪一行或若干行代码修改历史记录
  7. 机器学习十大经典算法
  8. .net 使用ClickOne方式发布的应用程序无法启动的解决办法
  9. 你需要知道的 N 种抓取 dump 的工具
  10. FPGA编程过程中遇到的一些错误