当前位置: 首页 > 科技观察

IntelliJ IDEA插件之开发两种方式创建插件工程

时间:2023-03-14 17:17:36 科技观察

开发IntelliJIDEA插件创建插件项目的两种方式转载本文请联系bugstack公众号。1.前言不是都不能,都是真的不行!对于coder行业的编程学习生涯,你会遇到很多不会,不会搭建IDEA项目,不会写老师案例,无法完成书中的效果,达不到要求project,不能实现复杂的逻辑,不能抽象出project的结构等等。但是这些也不是全部都学不会,因为太复杂学不来,但是很大一部分内容是不知道的因为缺乏好的信息,清晰的文件,缺乏完整的案例。.刚好最近在折腾IDEA插件开发的时候,市面上的资料真的不多,也没有系统完整的开发指南,所以遇到了很多不懂的东西,自己也需要一点查询来搜索源代码并验证API接口,最终实现各种功能。当然,在这个过程中,我确实踩了很多坑!好的!安顿下来后,在本专栏中,我将一些关于IDEA插件开发的知识作为案例进行输出。一方面可以让自己清空所有的知识项,另一方面也可以帮助到更多有需要的研发人员。2.需求目的你可能会想什么场景会需要插件开发。其实插件化开发是一种通用的解决方案,由服务平台定义标准,让各自的用户根据需要进行扩展。这个像我们很常用的P3C代码检查插件、代码审计插件、脚手架项目创建插件、自动化API提取插件、单元测试统计插件等,这些都是功能插件从IDEA代码开发平台扩展而来。插件也可以说是一种解决方案,其实和你在代码编程时使用别人已经定义好的标准结构和函数来扩展自己的功能是一样的。并且这种方式也可以很好的解决一些在代码开发阶段不易投入代码测试的问题场景,可以及时提醒研发人员响应修改过程。三、环境说明IntelliJPlatformPluginJDK不是自己安装的JDK1.8,只有插件JDK才能开发插件IntelliJIDEA2019.3.1x64如果有其他版本,会涉及到gradle的版本修改-5.2.1和gradle-5.2.1插件工程创建后插件开发匹配2019IDEA版本下。如果遇到一些环境问题,可以参考我们在官方文档https://plugins.jetbrains.com/docs/intellij/disposers.html中的介绍。开发IDEA插件的工程化方式有两种,分别是模板模式和Gradle工程模式。下面我们演示不同方式的项目创建以及涉及到的知识点介绍。虽然两种方式都可以创建IDEA插件项目,但是更推荐Gradle方式。4.模板创建1.创建指南New->Project->IntelliJPlatformPlugin2.项目结构guide-idea-plugin-create-project-by-platform├──resources│└──META-INF│└──plugin.xml└──src└──cn.bugstack.guide.idea.plugin└──MyAction.java源码:https://github.com/fuzhengwei/guide-idea-plugin-create-project-by-platform插件。xml插件配置:开发描述、版本信息、Action事件入口、扩展信息(数据存储等)src具体事件、UI表单、工程逻辑代码开发另外创建MyAction不是直接创建普通类,而是通过New->PluginDevKit->Action来创建,因为这种创建方式可以自动在plugin.xml中添加action配置。当然,如果像普通类一样自己创建一个Action类,需要自己手动处理配置信息。3.plugin.xml配置cn.bugstack.guide.idea.pluginCreateProjectByPlatform1.0小付兄1.学习IDEA插件项目Build2.验证插件基本功能的实现]]>1.工程建设2。菜单阅读3。获取配置4。回显页面]]>com.intellij.modules.platform在这里,专注于行动。上面的其他项目信息、版本说明、个人信息等可以根据自己的信息填写,不会影响插件的运行。Actions是关于所有事件入口的配置,也就是你想让你的IDEA把插件显示在IDEA表单的哪里,快捷键都配置好了。这里的配置说明是FileMenu下的第一个条目是你的插件。4.MyAction事件入口![1-04](https://bugstack.cn/assets/images/middleware/guide-idea-plugin-1-04.png)![1-04](https://bugstack.cn/assets/images/middleware/guide-idea-plugin-1-04.png)publicclassMyActionextendsAnAction{@OverridepublicvoidactionPerformed(AnActionEvente){Projectproject=e.getData(PlatformDataKeys.PROJECT);PsiFilepsiFile=e.getData(CommonDataKeys.PSI_FILE);StringclassPath=psiFile.getVirtualFile().getPath();Messages.showMessageDialog(project,"guide-idea-plugin-create-project-by-platform:"+classPath,"HiIDEAPlugin",Messages.getInformationIcon());}}获取Project信息,PsiFile文件信息,以及MyAction事件入口中对应的类路径。最后在Messages.showMessageDialog下打印,这样你把鼠标放到项目类下面,点这个按钮就可以看到类路径弹窗了。5.运行测试。运行过程中点击Plugin绿色箭头。此时会打开一个新的IDEA工程,在这个工程中默认安装你开发的插件。在新打开的IDEA插件工程中,选择工程类后,点击File->MyAction,运行结果。通过测试可以看到运行效果,已经可以打印项目下类的路径信息了。也可以尝试将Action入口放在其他按钮下进行测试。五、Gradle创建1.创建指南New->Project->Gradle并选择Java&IntelliJPlatformPlugin2.项目结构guide-idea-plugin-create-project-by-gradle├──.gradle└──src├──main│└──java│└──cn.bugstack.guide.idea.plugin│└──MyAction.java├──resources│└──META-INF│└──plugin.xml├──build.gradle└──gradle.properties源码:https://github.com/fuzhengwei/guide-idea-plugin-create-project-by-gradle和模板的创建Gradle的主要区别在于build.gradle的配置和gradle.属性。这两个文件主要处理Gradle相关的信息。其中gradle.properties用于配置JVMXmx参数,避免下载耗资源崩溃。plugin.xml配置插件入口等内容,MyAction为事件入口。3.build.gradle配置插件{id'java'id'org.jetbrains.intellij'version'0.6.3'}group'cn.bugstack.guide.idea.plugin'version'1.0-SNAPSHOT'sourceCompatibility=1.8repositories{mavenCentral()}dependencies{testCompilegroup:'junit',name:'junit',version:'4.12'}//参见https://github.com/JetBrains/gradle-intellij-plugin/intellij{version'2019.3.1'}patchPluginXml{changeNotes"""1.工程搭建2.菜单阅读3.获取配置4.回显页面]]>"""}Gradle和maven的配置,还是可以找到一些类似的地方的,如果你没有用过gradle,也可以用它的.这里需要注意的是,plugins中的id'org.jetbrains.intellij'version'0.6.3'默认版本有点高,不匹配gradle5.x。但是你可以尝试调试合适的版本来使用4.MyAction事件入口getVirtualFile().getPath();Messages.showMessageDialog(project,"guide-idea-plugin-create-project-by-gradle:"+classPath,"HiIDEAPlugin",Messages.getInformationIcon());}}在这里创建的templatemethod的情况是一样的,为了区分这两个插件测试,我们在这里打印项目名称。当然你也可以使用project.getName()来获取项目名称。5.运行测试Gradle测试运行相当于运行:runIde,和普通代码调试一样。通过测试运行效果可以看到运行结果,已经可以显示项目下类的路径信息。6.总结整个内容的学习还是比较简单的,即使你之前没有开发过IDEA插件,也可以按照这个套路完成插件开发。像这样的知识内容,平时只是在业务开发中做的,接触的不多。一开始听起来很奇怪,但是有了这些信息,您就可以开始了。本章初步介绍了IDEA插件的使用方法和一个非常简单的基本功能。后面会在Gradle创建插件的基础上继续开发其他案例功能,逐步学习IDEA插件开发中使用的各种技巧,完成需要解决的问题。问题。在学习的过程中,可以尝试扩展一些其他的组件条目,打印不同的项目信息。就像你使用的一些插件一样,它帮助你生成获取、设置或提取集合接口信息,包括你写了多少行代码以及它们是如何实现的。