当前位置: 首页 > news >正文

基于 intellij-platform-plugin-template 开发IDEA插件注意事项

自己开发了一个简单的插件,主要功能是将Java类转为Json Schema,选中多个Java文件,可以生成对应Json Schema的Json文件,目的是为了方便导入到Api fox中的数据模型中,后端就不用去手写每个字段什么意思了.
插件名称为:Java Generate Json Schema (还在审核…)

1. 开发语言由 kotlin 改为 java

重命名 src/main/ 下的 kotlin 改为 java

2. 没有 PsiJava 相关的 API ,如PsiClass 、PsiJavaFile等

修改 根目录下的 gradle.properties

platformBundledPlugins = com.intellij.java

3. 设置 调试 IDEA 为本地已经安装的

修改 根目录下的 build.gradle.kts 当中的 dependencies.intellijPlatform

dependencies {
    // ... 省略部分代码
    intellijPlatform {
//        create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion"), true)
        local("C:\\Program Files\\JetBrains\\IntelliJ IDEA 2024.3.1.1")
		// ...省略部分代码
    }
}

4. 打包后,可用的插件包路径在 build/distributions 下 ,是zip文件

5. 上传到插件应用市场,提示:Invalid plugin descriptor ‘description’. The plugin description is shorter than 40 characters and/or the plugin description contains non-Latin characters.

查看 README.md 文件当中的 标签中的内容 是否是英文并且大于40个字符串。因为在build.gradle.kts配置了,会读取这个标签里面的内容作为插件描述

就是这一段:

description = providers.fileContents(layout.projectDirectory.file("README.md")).asText.map {
            val start = "<!-- Plugin description -->"
            val end = "<!-- Plugin description end -->"
        }

6. 使用2025版本的IDEA,action 配置 没有效果,调试后,没有对应的操作入口

https://plugins.jetbrains.com/docs/intellij/creating-actions-tutorial.html#creating-a-custom-action

When targeting IntelliJ Platform 2022.3 or later, AnAction.getActionUpdateThread() must be implemented
针对 IntelliJ 平台 2022.3 或更高版本时,必须实现 AnAction.getActionUpdateThread()

    @Override
    public @NotNull ActionUpdateThread getActionUpdateThread() {
        return ActionUpdateThread.BGT;
    }

AnAction.getActionUpdateThread() 返回 ActionUpdateThread ,它指定 update() 方法是在后台线程(BGT)上调用还是在事件调度线程(EDT)上调用。首选方法是在 BGT 上运行更新,其优点是保证对 PSI、虚拟文件系统(VFS)或项目模型的应用程序范围的读取访问。在 BGT 上运行更新会话的操作不应该直接访问 Swing 组件层次结构。相反,指定在 EDT 上运行更新的操作不能访问 PSI、VFS 或项目数据,但可以访问 Swing 组件和其他 UI 模型。

https://plugins.jetbrains.com/docs/intellij/action-system.html#anactiongetactionupdatethread

相关文章:

  • form 表单内容序列化成一个字符串
  • 大模型架构记录2 【综述-相关代码】
  • 数据服务赋能数据治理:从“One Service”到QuickAPI的演进
  • redis操作
  • 【搜索】dfs(回溯、剪枝、记忆化)
  • 【C++】类和对象(二)默认成员函数之构造函数、析构函数
  • Springboot集成Debezium监听postgresql变更
  • CQL学习
  • 游戏引擎学习第177天
  • 996引擎-接口测试:背包
  • pnpm 报错 Error: Cannot find matching keyid 解决
  • Mybatis的基础操作——03
  • 西交建筑学本科秋天毕业想转码,自学了Python+408,华为OD社招还是考研更香?
  • 第十四章:模板实例化_《C++ Templates》notes
  • 如何编写SLURM系统的GRES资源插件
  • Lustre 语言的 Rust 生成相关的工作
  • Autosar OS配置-Timing Protection配置及实现--基于ETAS工具
  • 题单:精挑细选
  • 生物化学笔记:医学免疫学原理02 抗原概念+免疫应答+抗原的分类
  • SQL语言——MySQL
  • 体坛联播|曼联一只脚迈进欧联杯决赛,赵心童4比4奥沙利文
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物
  • 5月人文社科中文原创好书榜|巫蛊:中国文化的历史暗流
  • 央行4月开展12000亿元买断式逆回购操作
  • 美航母撞船后又遇战机坠海,专家:长时间作战部署疲于奔命是主因
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长