本篇将讲解如何创建一个新的IntelliJ IDEA插件项目,并创建我们的第一个Action。
官方文档:创建一个插件项目
准备工作
- 安装最新版本IntelliJ IDEA 社区版,有条件的可以上完全版
- 熟悉gradle、gradle kts
- 安装Java8、Java17 & Java17
New Project
通过项目创建向导选择IDE PLugin项目
Type
:插件类型,Plugin一般表示本插件需要完成一些IDE功能上的自定义,而Theme表示完成一些UI页面上的自定义,这里我们选择Plugin。
项目配置详解
点击create之后默认的项目结构长这样:
build.gradle/build.gradle.kts
用过gradle的小伙伴应该很熟悉这个文件,我们需要在这个文件中配置我们插件项目的一些参数
intelliJ
intellij {
version.set("2022.2.4")
type.set("IC") // Target IDE Platform
plugins.set(listOf(/* Plugin Dependencies */))
}
-
version
插件的目标ide的发布版本,详见版本发布记录 -
type
插件的目标ide的平台
type对照表type IDE AI Android Studio CL Clion IU IDEA Ultimate、WebStorm、RubyMine、DataGrip IC IDEA Community GO GoLand PS PHP Storm PY PyCharm -
plugins
插件所依赖的官方插件或者在插件商店里面的插件集合,值为依赖插件的ID,详见官方文档:插件依赖。
其中,version
使用版本全称时type
可省略,如:AI-202.7660.26.42.7322048
表示Android Studio 202.7660发行版本
每次gradle sync的时候会检查本地是否有目标ide的实例,没有就从远程下载,可以通过以下设置自己本地已安装的ide实例:
intellij {
// 本地安装路径的根目录
localPath.set("/usr/local/android-studio")
}
plugins
plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "1.7.20"
id("org.jetbrains.intellij") version "1.13.1"
}
Plugins闭包配置项目所使用的gradle插件
java
Java支持。Java版本与目标Ide版本绑定,2020.3
至少需要Java11、2022.2
之后至少需要Java17org.jetbrains.kotlin.jvm
Kotlin支持。同样与目标Ide版本绑定,项目Kotlin stdlib不能超过目标ide捆绑的Kotlin版本,点我查看Kotlin版本对应规则org.jetbrains.intellij
本项目的核心插件,负责插件项目的依赖引入、调试支持、插件打包、插件发布等功能
patchPluginXml
patchPluginXml {
// 插件支持的最小版本
sinceBuild.set("222")
// 插件支持的最大版本
untilBuild.set("232.*")
}
plugin.xml
此文件是插件所有功能实现类的注册文件,插件的绝大部分功能都是以拓展所依赖的插件或者IDE提供的拓展点的方式完成自己自定义的功能。
拓展点详解戳我
plugins.xml基本配置:
<idea-plugin>
<!--插件的ID,具有唯一性,不能和插件商店已有的id重复 -->
<id>com.example.plugin-demo</id>
<!--插件的名称 -->
<name>Plugin-demo</name>
<!-- A displayed Vendor name or Organization ID displayed on the Plugins Page. -->
<vendor email="support@yourcompany.com" url="https://www.yourcompany.com">YourCompany</vendor>
<!-- Description of the plugin displayed on the Plugin Page and IDE Plugin Manager.
Simple HTML elements (text formatting, paragraphs, and lists) can be added inside of <![CDATA[ ]]> tag.
Guidelines: https://plugins.jetbrains.com/docs/marketplace/plugin-overview-page.html#plugin-description -->
<description><![CDATA[
Enter short description for your plugin here.<br>
<em>most HTML tags may be used</em>
]]></description>
<!-- Product and plugin compatibility requirements.
Read more: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
<depends>com.intellij.modules.platform</depends>
<!--本插件实现了的拓展点 -->
<extensions defaultExtensionNs="com.intellij">
</extensions>
</idea-plugin>
我的第一个Action
Action
插件可以向IDE中添加工具栏(toolbar)、菜单(menu),也可以向已有的工具栏和菜单栏中添加Action。
创建Action
所有的Action都继承自AnAction类,并实现它的actionPerformed(AnActionEvent e)
方法:
class MyAction :AnAction(){
override fun actionPerformed(event: AnActionEvent) {
}
}
注册Action
Action创建好后需要在plugin.xml中注册,可点击IDE的快速修复拉起Action注册向导:
参数说明
- Action ID:任意字符串,
- Class Name:Action实现类的全限定名
- Name:名称
- Description:
- Add to Group:此Action需要添加到哪个Action Group
- Keyboard Shotcuts:绑定快捷键
点击OK后会在plugin.xml中生成如下代码
<idea-plugin>
<actions>
<action id="com.example.plugindemo.MyAction" class="com.example.plugindemo.MyAction" text="MyAction"
description="My first action">
<add-to-group group-id="FileMenu" anchor="first"/>
<keyboard-shortcut keymap="$default" first-keystroke="ctrl L"/>
</action>
</actions>
</idea-plugin>
测试Action
运行gradle任务runIde
./gradlew runIde --stacktrace
我们在File菜单中就可以看到我们新加的Action
至此我们的第一个插件就运行成功了,即便我们点击MyAction没有任何反应。更多有关Action的内容请点击:
Action详解