技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?

简介: 前言二、抛出问题三、开发插件涉及的问题四、开发插件的两种配置1. 基础配置2. 遇到问题五、写个测试案例1. 工程结构2. AnAction3. MyToolWindowFactory4. plugin.xml5. 测试结果六、插件开发能做啥都1. 快速生成 CRUD 工程代码2. 在 IDEA 中摸鱼聊天3. 可视化流程编排七、总结八、系列推荐

目录


  • 一、前言
  • 二、抛出问题
  • 三、开发插件涉及的问题
  • 四、开发插件的两种配置
  • 1. 基础配置
  • 2. 遇到问题
  • 五、写个测试案例
  • 1. 工程结构
  • 2. AnAction
  • 3. MyToolWindowFactory
  • 4. plugin.xml
  • 5.  测试结果
  • 六、插件开发能做啥都
  • 1. 快速生成 CRUD 工程代码
  • 2. 在 IDEA 中摸鱼聊天
  • 3. 可视化流程编排
  • 七、总结
  • 八、系列推荐


一、前言

不踩些坑,根本不是成熟的码农!

你觉得肯德基全家桶是什么?一家人一起吃的桶吗,就那么一点点?不是,肯德基全家桶说的是,鸡的全家桶!

听到这个故事就像有时候我因为需要解决某些问题去搜索折腾验证排除的技术方案,因为方向不对,所以努力也就白费。只能一次次在众多的资料、文档、源码中一点点找到并组合出适合自己的问题场景的技术处理手段。

但这个过程有时候又是必须经历的,很少有时候能一次就找到正确的答案或者人,哪怕开始就找到了,也会再去排查下其他的资料,看看还有没有更好的。是不,这就是你吧?

二、抛出问题

我又要冲IDEA插件开发了!

在研究字节码插桩的相关技术后,🤔考虑着除了通常的用在代码上线后的非入侵式监控外,是不是也可以用于研发在开发阶段对系统接口的提取呢?

带着这个从脑袋中冒出的想法,想到如果要处理这个事情,最核心的问题就是开发一款IDEA插件+字节码插桩能力,在代码运行时对运行方法增强,提取相关的必要信息。别说案例还真做出来了,如下:

7.jpg

  • 案例地址:基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析
  • 后续问题:其实实现到这里还只能算是一个案例,对于 IDEA 插件开发能力并没有完全弄透,比如这个 IDEA 插件需要做一些基础配置,那么在哪里打开呢?还有实时监控并产生的接口信息能在 IDEA 界面右侧展示出来或者支持导出吗?如果我再有一些集合 IDEA 插件开发的能力做的其他的功能引入咋办呢?这里用到了哪些技术呢?等等,这些问题都需要去一一解决掉,才能完完整整的开发一个可用的 IDEA 插件,为此,需要做更深入的资料整理和实践验证。

三、开发插件涉及的问题

问题汇总:开发一个 IDEA 插件基本要涉及到的问题过程如下:

8.jpg

  • 开发方式:在官网的描述中,创建IDEA插件工程的方式有两种分别是,IntelliJ Platform Plugin 模版创建和 Gradle 构建方式。
  • 框架入口:一个 IDEA 插件开发完,要考虑把它嵌入到哪,比如是从 IDEA 窗体的 Edit、Tools 等进入配置还是把窗体嵌入到左、右工具条还是IDEA窗体下的对话框。
  • UI:思考的是窗体需要用到什么语言开发,没错,用的就是 Swing、Awt 的技术能力。
  • API:在 IDEA 插件开发中,一般都是围绕工程进行的,那么基本要从通过 IDEA 插件 JDK 开发能力中获取到工程信息、类信息、文件信息等。
  • 外部功能:这一个是用于把插件能力与外部系统结合,比如你是需要把拿到的接口上传到服务器,还是从远程下载文件等等。

四、开发插件的两种配置

1. 基础配置

  1. IntelliJ IDEA 2019.3.1 x64
  2. JDK 需要配置 IntelliJ Platform Plugin JDK,在 Project Setting 中设置,这样才可以正常开发 IDEA 插件
  3. id 'org.jetbrains.intellij' version '0.6.3'
  4. gradle-5.2.1 与 2019 IDEA 版本下的插件开发匹配
  5. Settings -> Build, Execution,Deloyment -> Build Tools,配置 Gradle。Gradle user home = D:/Program Files (x86)/gradle/gradle-5.2.1/.gradle User Gradle from =gradle-wrapper.properties 或者 Specified location 具体如下图:
    9.jpg

如果你是使用 IDEA New Project 默认的 IntelliJ Platform Plugin 方式,其实只关注1、2两步骤就可以了,但如果你需要 Gradle,那么需要注意3、4、5步骤的设置。当然通常也更推荐使用 Gradle 来搭建工程,这样你在需要一些额外的 Jar 包时候,只需要在 Gradle build.gradle 配置即可,而不是把需要的 Jar 包复制到工程的 lib 下。

2. 遇到问题

在使用 Gradle 构建项目后,你会遇到几个问题;

  1. 提前下载好 Gradle 5.2.1 版本并配置上,否则构建工程自动下载会比较慢 https://gradle.org/next-steps/?version=5.2.1&format=all
  2. 构建工程时候拉取相关内容,会比较慢,如果你有代理会好一些。
  3. 【麻烦的问题】基于 Gradle 的 IDEA 插件开发会在构建过程中,会下载一个匹配版本的 IDEA 软件用于启动测试开发插件,几百兆那种zip包 ideaIC-2019.3.1.zip。这个时候基本你会遇到一个崩溃的报错 Could not resolve all files for configuration ':detachedConfiguration1'. 咋办呢,如果你不嫌弃麻烦可以手动下载并SHA1加密后把下载的文件放到缓存文件夹中 .gradle\caches\modules-2\files-2.1 具体操作如下:
  • 打开系统盘下当前用户的.gradle目录,进入.gradle\caches\modules-2\files-2.1目录,即为缓存文件的目录。这个目录是你的报错构建过程中的报错地址,Could not get resource D:\Program Files (x86)\gradle\gradle-5.2.1\.gradle\caches\modules-2\files-2.1\com.jetbrains.intellij.idea\ideaIC\2019.3.1
  • 加密文件夹2dae8e50d4b0508cad2e680b53414f657954f390目录名称(你的可能不是这样的),我去,这个应该是加密过的,但是是什么加密呢?,经过了解知道了这个是SHA1加密,且是对文件进行SHA1的加密生成的唯一字符串,但是windows上没有这个命令,在线SHA1也太麻烦了,还要上传文件,于是想到了Java的API,还有就是通过git hash命令行来实现。把我们的文件ideaIC-2019.3.1.zip先临时拷贝到这个目录。运行sha1sum.exe ideaIC-2019.3.1.zip命令,生成唯一的唯一字符串(用来校验文件的完整性),这样就拿到这个2dae8e50d4b0508cad2e680b53414f657954f390目录名
  • 接下来在2019.3.1目录下,新建目录2dae8e50d4b0508cad2e680b53414f657954f390,将ideaIC-2019.3.1.zip移动进去即可。
  1. 【堆栈溢出】在 Gradle 构建的过程中,消耗内存较大,可能会报错 Java heap space 所以也可以 在IDEA项目根目录下,新建文件gradle.properties,添加如下内容,变更gradle Jvm参数  org.gradle.jvmargs=-Xmx2024m -XX:MaxPermSize=512m 别说还挺好用,竟然构建成功了。

五、写个测试案例

1. 工程结构

PluginGuide
├── .gradle
└── src
    ├── main
    │   └── java
    │       ├── HiClazz.java
    │       ├── MyDumbAwareAction.java
    │       ├── MySearchableConfigurable.java
    │       ├── MyToolWindowFactory.java    
    │       └── TestUI.java    
    └── resources
        ├── icons  
        └── META-INF
            └── plugin.xml
  • HiClazz 是继承 AnAction 的实现类,用于附着到 IDEA 的窗体上,点击后打开对应页面
  • MyDumbAwareAction、MyToolWindowFactory,配合使用,用于在 IDEA 最下面的窗体设置,与你看见的控制台输出信息位置一样。
  • MySearchableConfigurable,可以用于 Settings 中配置窗体。
  • TestUI 是基于 Swing 开发的窗体,验证在 AnAction 实现类中打开。
  • plugin.xml  是整个 IDEA 咖啡的配置文件,你所有的窗体都会在这个配置文件里有所体现。

2. AnAction

public class HiClazz extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getData(PlatformDataKeys.PROJECT);
        PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
        String classPath = psiFile.getVirtualFile().getPath();
        String title = "Hello World!";
        Messages.showMessageDialog(project, classPath, title, Messages.getInformationIcon());
    }
}
  • 测试在 IDEA 中读取鼠标停留在类文件中的信息。我们可以把这个 AnAction 配置到各个 IDEA 菜单中。

3. MyToolWindowFactory

public class MyToolWindowFactory implements ToolWindowFactory {
    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        toolWindow.setToHideOnEmptyContent(true);
        class MyPanel extends SimpleToolWindowPanel {
            public MyPanel(boolean vertical) {
                super(vertical);
                DefaultActionGroup group = new DefaultActionGroup();
                group.add(new MyDumbAwareAction("Login1"));
                group.add(new MyDumbAwareAction("Login2"));
                group.add(new MyDumbAwareAction("Login3"));
                ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("ToolBar", group, false);
                setToolbar(toolbar.getComponent());
            }
        }
        // 添加一个页
        toolWindow.getContentManager().addContent(ContentFactory.SERVICE.getInstance().createContent(new MyPanel(false), "First", false), 0);
    }
}
  • 在 IDEA 的最下面窗体中,如果想展示自己的窗体,则需要开发对应的 ToolWindowFactory 实现类,这样才可以展示你的内容。
  • 这里的思想基本是 Swing 技术的开发方式,如果你不熟悉 Swing 最这块内容会比较陌生。

4. plugin.xml

<extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
    <toolWindow canCloseContents="true" anchor="bottom"
                id="SmartIM"
                factoryClass="MyToolWindowFactory">
    </toolWindow>
    <!-- 在Setting中添加自定义配置模版 -->
    <projectConfigurable groupId="Other Settings" displayName="My Config" id="thief.id"
                         instance="MySearchableConfigurable"/>
</extensions>
<actions>
    <!-- Add your actions here -->
    <action id="HiId_FileMenu" class="HiClazz" text="HiName">
        <add-to-group group-id="FileMenu" anchor="first"/>
        <add-to-group group-id="MainMenu" anchor="first"/>
        <add-to-group group-id="EditMenu" anchor="first"/>
        <add-to-group group-id="ViewMenu" anchor="first"/>
        <add-to-group group-id="CodeMenu" anchor="first"/>
        <add-to-group group-id="AnalyzeMenu" anchor="first"/>
        <add-to-group group-id="RefactoringMenu" anchor="first"/>
        <add-to-group group-id="BuildMenu" anchor="first"/>
        <add-to-group group-id="RunMenu" anchor="first"/>
        <add-to-group group-id="ToolsMenu" anchor="first"/>
        <add-to-group group-id="WindowMenu" anchor="first"/>
        <add-to-group group-id="HelpMenu" anchor="first"/>
    </action>
    <action id="HiId_EditorPopupMenu" class="HiClazz" text="HiName">
        <add-to-group group-id="EditorPopupMenu" anchor="first"/>
    </action>
    <action id="HiId_MainToolBar" class="HiClazz" text="HiName">
        <add-to-group group-id="MainToolBar" anchor="first"/>
    </action>
</actions>
  • 在 plugin.xml 的配置中,主要是把各个功能实现窗体配置到对应的菜单下,比如 Tools 下、toolWindow 里等。

5.  测试结果

启动运行

10.jpg

  • IDEA 插件开发运行会基于 Plugin 或者 Gradle 下配置的 ::runIde

运行界面

11.jpg

  • 在 IDEA 的各个菜单中都可以看到新增加的 HiName 插件,在你实际开发的时候选择需要的内容进行配置即可。

运行效果

12.jpg

  • 当鼠标点到类的上,在点 HiName 就可以看到对应的工程类信息了。

六、插件开发能做啥都

在 GitHub 上搜索 IDEA 插件开发,一共有44页内容,https://github.com/search?p=41&q=idea%E6%8F%92%E4%BB%B6&type=Repositories 涉及到自动化测试、工程脚手架、API生成、生成数据库的DAO类、一些常用工具,当然还有一些比较有意思的,比如:摸鱼看书、听郭德纲相声、微信聊天、局域网聊天、英语翻译等等。这里我给大家列举几个,开阔开阔思路。

1. 快速生成 CRUD 工程代码

13.jpg

  • 地址https://github.com/mars05/crud-intellij-plugin
  • 描述:一个增删改查的idea插件,可以根据数据库表结构,帮助您快速生成model、dao、service、controller等相关代码。同时支持MyBatis、JPA、MybatisPlus。

2. 在 IDEA 中摸鱼聊天

14.jpg

  • 地址https://github.com/Jamling/SmartIM4IntelliJ
  • 描述:ntelliJ IDEA上的SmartIM(原SmartQQ)插件,可以在IDEA中使用QQ或微信聊天。安装成功后,会在底部栏出现一个SmartIM的tab(如果没有底部栏,则在菜单View中把ToolButtons勾选上)

3. 可视化流程编排

15.jpg

  • 地址https://github.com/alibaba/compileflow
  • 描述compileflow Process引擎是淘宝工作流TBBPM引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。

七、总结

  • IDEA 开发技术涉及到了对 IDEA 插件开发 API 的熟悉以及UI界面的开发,所以如果想开发一款 IDEA 插件,基本离不开对 Swing 的编写,不过也不需要太复杂的页面,所有这部分技能还好。
  • IDEA 官网文档仅提供了两种构建 IDEA 插件工程的方法,但更推荐 Gradle 方式,这样可以满足你对后续其他功能组件的便捷引入,以及做其他内容的扩展。
  • IDEA 插件开发可以开发出很多用于提效研发编程的技术插件,例如一些监控、脚手架、接口API以及调试、流程化低代码编排等等,所以这部分内容的价值还是蛮大的。
目录
相关文章
|
5月前
|
数据采集 JSON JavaScript
Cypress 插件实战:让测试更稳定,不再“偶尔掉链子”
本文分享如何通过自定义Cypress插件解决测试不稳定的痛点。插件可实现智能等待、数据预处理等能力,替代传统硬性等待,有效减少偶发性失败,提升测试效率和可维护性。文内包含具体实现方法与最佳实践。
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
333 7
|
11月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
6月前
|
存储 测试技术 API
数据驱动开发软件测试脚本
今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
237 0
|
9月前
|
传感器 人工智能 JavaScript
鸿蒙开发:DevEcoTesting中的稳定性测试
DevEcoTesting主要的目的也是用于软件的测试,可以让开发者无需复杂的配置,即可一键执行测试任务,同时提供了测试报告和分析,无论是对于开发者还是测试同学来说,都是一个非常方便的工具。
304 3
鸿蒙开发:DevEcoTesting中的稳定性测试
|
8月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
9月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1299 23
|
8月前
|
运维 jenkins 测试技术
"还在苦等开发部署环境?3步教你用Jenkins拿回测试主动权"
测试工程师最头疼的问题是什么?依赖开发部署环境! 开发延期→测试时间被压缩→紧急上线后BUG频出→测试背锅。传统流程中,测试被动等待部署,效率低下。而Jenkins自动化部署让测试人员自主搭建环境,实现: ✅ 随时触发测试,不再苦等开发 ✅ 部署效率提升10倍,抢回测试时间 ✅ 改善团队协作,减少互相甩锅 学习Jenkins部署能力,成为高效测试工程师,告别被动等待!
|
9月前
|
JSON Java 数据库连接
IDEA的插件大总汇 (让你的工作效率大大提高!)
我是小假 期待与你的下一次相遇 ~
2889 5
|
11月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1689 24