当前位置: 首页 > 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
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 解放日报头版头条:“五个中心”蹄疾步稳谱新篇
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”
  • 王一博赛车故障退赛冲上热搜,工作室回应:下次再战
  • 百岁太极拳大师、陈氏太极拳第十一代嫡宗传人陈全忠逝世
  • 凝聚多方力量,中国农科院油菜产业专家团部署单产提升新任务