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

idea插件开发(二)经验分享

一、引言

        在开发合并检查插件的时候,作者也遇到了不少问题,主要是自己摸索,没有其他人的经验。不过这种从0到1的技术研究对个人还是有好处的,就像作者之前自己捣鼓了一个微信小程序和到huggingface研究AI一样,虽然很麻烦,但是可以说很少有东西作者自己研究不了的。

        言归正传,接下来分享一些作者觉得会绕弯路的经验。

二、经验

1、环境

        idea的插件基本都是用Gradle进行开发的,主要是官方支持还有方便,社区也很活跃。IntelliJ IDEA对Gradle有良好的支持和集成。使用Gradle进行构建,可以方便地在IDE中进行项目配置、依赖管理和任务执行。

        在idea的file-project structure里面,需要下载并且设置IntelliJ IDEA IU的sdk

2、build.gradle 

        build.gradle用于定义项目的构建脚本。它包含了项目的构建逻辑、依赖管理、任务定义等信息

        Plugins用于扩展 Gradle 的功能。例如,java 插件用于构建 Java 项目,org.jetbrains.intellij 插件用于构建 IntelliJ IDEA 插件。

        repositories 块用于定义项目依赖的仓库位置。通过配置 repositories,Gradle 可以从指定的仓库中解析和下载项目所需的依赖项。flatDir指定打包放的目录,mavenCentral 是 Maven 中央仓库

        sourceSets 块用于定义项目的源代码和资源文件的位置

        allprojects 块用于配置所有子项目的通用设置

    intellij 块用于配置 IntelliJ IDEA 插件开发的相关设置,version 指定版本后,Gradle 会下载并使用该版本的 IntelliJ IDEA 进行构建和运行,下载的时间会比较长而且不能中断,要是断了还得重头再来。type 用于指定 IntelliJ IDEA 的类型。常见的类型包括:

  • 'IC':IntelliJ IDEA Community Edition(社区版)
  • 'IU':IntelliJ IDEA Ultimate Edition(旗舰版)

        patchPluginXml 块用于配置和修改 IntelliJ IDEA 插件的 plugin.xml 文件,changeNotes 用于指定插件的变更日志或发布说明,sinceBuild 用于指定插件兼容的最低 IntelliJ IDEA 构建版本,untilBuild 用于指定插件兼容的最高 IntelliJ IDEA 构建版本

        这个兼容版本作者看的挺奇怪的,231.*应该就是指2023第一期的任意小版本

plugins {id 'java'id 'org.jetbrains.intellij' version '1.12.0'
}group 'com.merge.check.designer'
version '1.0.2'sourceCompatibility = 1.8repositories {flatDir {dirs 'libs'}mavenCentral()maven {url "https://oss.sonatype.org/content/repositories/snapshots/"}
}sourceSets.main.resources {srcDirs = ['src/main/java', 'src/main/resources']include '**/*.xml'include '**/*.png'include '**/*.ico'include '**/*.gif'
}allprojects {dependencies {implementation fileTree(dir: 'libs', includes: ['*.jar'])}
}// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {version = '2022.3'type = 'IU'plugins = ['java','Git4Idea']
}
patchPluginXml {changeNotes = """<em>1.0.0 首发版本</em><br>1. 首发版本 <br>"""sinceBuild = '162.*'untilBuild = '231.*'
}

3、plugin.xml

        plugin.xml 定义插件的元数据、依赖、兼容性、描述、变更日志、扩展点、组件和资源绑定等信息,基本上插件的按钮、实现功能、切入、监听都需要在这里进行定义。

        比如这样就是实现监听vfs的文件监听

<applicationListeners><listener class="com.merge.check.idea.plugin.listener.ChangeListener"topic="com.intellij.openapi.vfs.newvfs.BulkFileListener"/></applicationListeners>

4、gradle-wrapper.properties

        这个文件就是用来设置gradle版本的

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

5、上传

        做好的插件始终是要上传插件市场的,毕竟手动安装比较麻烦,很难推广

        在jetBrains注册,点击自己的账号,然后点击upload plugin,就可以上传了,上传之后会有一个自动检测,一般是要描述符合规范,还有不能使用一些过期方法

        后面会有工作人员邮件联系,一般是要求放开源码给他检测,还有对功能描述做进一步的要求,人工审核都比较麻烦,要打回来几次

        My profile | JetBrains Marketplace

三、总结

        没有做过的读者可以试试,也许会火呢,不会做但是有想法的也可以给作者提提意见,作者去实现


http://www.mrgr.cn/news/20028.html

相关文章:

  • Linux驱动(五):Linux2.6驱动编写之设备树
  • LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)的定义
  • 回调函数的概念及其在异步编程中的应用
  • 西湖大学卢培龙团队突破:精确从头设计异手性蛋白复合物,开启镜像蛋白研究新篇章
  • 【c++】平常自己练习写代码的两个大方向
  • 设计模式-行为型模式-策略模式
  • 20240905软考架构-------软考116-120答案解析
  • 10天计划:每天5小时睡眠
  • 【计算机组成原理】你知道什么是8421码、什么是余3码什么又是2421码吗?今天这篇文章带你认识计算机中的BCD码
  • ARP、RARP与路由选择协议
  • Keil下载烧录程序到单片机提示flash outtime超时
  • 支持国产——使用mmdetection进行目标检测并保存推理结果图片
  • vscode任务配置之tasks.json
  • Python | Leetcode Python题解之第385题迷你语法分析器
  • 鸿蒙OS试题
  • ”wait”和“notify”为什么要在Synchronized代码块里面?
  • 用Python实现时间序列模型实战——Day 11: 指数平滑模型
  • matlab 计算3D点到三角面的距离
  • 【基础算法总结】BFS_拓扑排序问题
  • 模电-三极管2