需求目的
可能你会想什么场景会需要用到插件开发,其实插件开发算是一种通用的解决方案,由服务平台定义标准让各自使用方进行自需的扩展。
这就像我们非常常用的 P3C 代码检查插件、代码审计插件、脚手架工程创建插件、自动化API提取插件、单元测试统计插件等等,这些都是在 IDEA 代码开发平台扩展出来的各项功能插件。
插件也可以说是一种解决方案,其实与你在代码编程时使用人家已经定义好的标准结构和功能下,扩展出自己的功能时是一样的。而这种方式也可以非常好的解决一些属于代码开发期间不易于放到代码提测后问题场景,并能及时提醒研发人员作出响应的修改处理。
环境说明
在官方文档 https://plugins.jetbrains.com/docs/intellij/disposers.html
(opens new window) 介绍开发 IDEA 插件的工程方式有两种,分别是模板方式和 Gradle 工程方式。这里我们分别演示下不同方式下工程的创建和所涉及到知识点内容的介绍,虽然两种方式都能创建 IDEA 插件工程,但更推荐使用 Gradle 方式。
模板方式创建
1. 创建引导
New -> Project -> IntelliJ Platform Plugin
2. 工程结构
lasse-idea-plugin-demo
├── resources
│ └── META-INF
│ └── plugin.xml
└── src
└── cn.lasse.idea.plugin
└── MyAction.java
3. plugin.xml 配置
<idea-plugin>
<id>cn.lasse.idea.plugin</id>
<name>demo</name>
<version>1.0</version>
<vendor email="123456789@qq.com" >Lasse</vendor>
<description><![CDATA[
基于IDEA插件模板方式创建测试工程<br>
<em>1. 学习IDEA插件工程搭建</em>
<em>2. 验证插件基础功能实现</em>
]]></description>
<change-notes><![CDATA[
插件开发学习功能点<br>
<em>1. 工程搭建</em>
<em>2. 菜单读取</em>
<em>3. 获取配置</em>
<em>4. 回显页面</em>
]]>
</change-notes>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="173.0"/>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<depends>com.intellij.modules.platform</depends>
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<!-- Add your actions here -->
<action id="MyAction" class="cn.lasse.idea.plugin.MyAction" text="MyAction" description="MyAction">
<add-to-group group-id="FileMenu" anchor="first"/>
</action>
</actions>
</idea-plugin>
4. MyAction 事件入口
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getData(PlatformDataKeys.PROJECT);
PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
String classPath = psiFile.getVirtualFile().getPath();
Messages.showMessageDialog(project, "本少爷说你的路径是: " + classPath, "Hi IDEA Plugin", Messages.getInformationIcon());
}
}
5. 运行测试
6.运行结果
通过测试运行效果可以看到,已经可以打出工程下类的路径信息了。你也可以尝试把Action的入口放到其他按钮下进行测试
Gradle 方式创建(推荐)
1. 创建引导
New -> Project -> Gradle 选中 Java & IntelliJ Platform Plugin
2. 工程结构
lasse-idea-plugin-create-project-by-gradle
├── .gradle
└── src
├── main
│ └── java
│ └── cn.lasse.guide.idea.plugin
│ └── MyAction.java
├── resources
│ └── META-INF
│ └── plugin.xml
├── build.gradle
└── gradle.properties
3. build.gradle 配置
plugins {
id 'java'
id 'org.jetbrains.intellij' version '0.6.3'
}
group 'cn.bugstack.guide.idea.plugin'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
version '2019.3.1'
}
patchPluginXml {
changeNotes """
<![CDATA[
插件开发学习功能点<br>
<em>1. 工程搭建</em>
<em>2. 菜单读取</em>
<em>3. 获取配置</em>
<em>4. 回显页面</em>
]]>"""
}
4. MyAction 事件入口
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getData(PlatformDataKeys.PROJECT);
PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
String classPath = psiFile.getVirtualFile().getPath();
Messages.showMessageDialog(project, "本少爷说你的路径是: " + classPath, "Hi IDEA Plugin", Messages.getInformationIcon());
}
}
5. 运行测试
6.运行结果
通过测试运行效果可以看到,已经可以打出工程下类的路径信息了。你也可以尝试把Action的入口放到其他按钮下进行测试
总结