JetBrains IDE插件开发教程(一)

前言

好久没写过博客了,笔者想写点新的东西,最近对JetBrains IDE插件开发感兴趣,虽然笔者从来没有学过,也不知道怎么开发,哈哈哈哈哈哈,

但是啊,不重要。

不会的东西问一问AI,或者自己探索一下。

慢慢来,不急。

准备

下载IDE

首先,要开发JetBrains IDE插件,需要一些参考

IntelliJ Platform SDK | IntelliJ Platform Plugin SDKhttps://plugins.jetbrains.com/docs/intellij/welcome.html上面网址是官网的教程,从其中的教程中可以发现如此信息

需要Java,Kotlin的环境,还需要一个IDE,需要一个IDE来开发IDE的插件。

哈哈哈哈哈哈,可以。

那么就下载IDEA,网址如下

下载 IntelliJ IDEAhttps://www.jetbrains.com/zh-cn/idea/download/?section=windows下载,安装后。

初始化项目

笔者首先新建一个Kotln项目,构建系统选择Gradle,名字任取

刚开始会下载一些东西,笔者也是第一次使用。

应该是下载相关依赖。

可以发现在Main.kt有一段默认代码

Kotlin 复制代码
package org.example

//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
fun main() {
    val name = "Kotlin"
    //TIP 当文本光标位于高亮显示的文本处时按 <shortcut actionId="ShowIntentionActions"/>
    // 查看 IntelliJ IDEA 建议如何修正。
    println("Hello, " + name + "!")

    for (i in 1..5) {
        //TIP 按 <shortcut actionId="Debug"/> 开始调试代码。我们已经设置了一个 <icon src="AllIcons.Debugger.Db_set_breakpoint"/> 断点
        // 但您始终可以通过按 <shortcut actionId="ToggleLineBreakpoint"/> 添加更多断点。
        println("i = $i")
    }
}

等下载完成相关依赖后,ctrl+shift+f10,运行代码,结果如下

没问题,可以运行。

这只是一个普通的kotil代码,进行初始化,笔者电脑上没有关于kotlin和Gradle的依赖。

看起来没问题。

安装插件的插件

接下来,需要安装一个插件------Plugin DevKit

安装插件来写插件。在插件市场里面搜索

初始化插件

回到新建项目对话框。

可以发现生成器下面多了一个"IDE 插件"选择,这应该就是初始化插件的模板。

点击,初始化项目,项目名就叫fitst

为什么叫这个,笔者其实想叫first,但是打错了,算了,不重要

其他的随便填。

出现了平台依赖项和插件依赖项,这些不知道是干什么的,先不管,什么都不选,直接创建。

看看文件,看看代码

创建之后,好像需要导入一些东西。

先不急

build.gradle.kt文件

Kotlin 复制代码
import org.jetbrains.intellij.platform.gradle.TestFrameworkType

plugins {
    id("org.jetbrains.kotlin.jvm")
    id("org.jetbrains.changelog")
    id("org.jetbrains.intellij.platform")
}

// Read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html
dependencies {
    testImplementation(libs.junit)

    // IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html
    intellijPlatform {
        intellijIdea("2025.3.5")
        testFramework(TestFrameworkType.Platform)

        // Add plugin dependencies for compilation here, for example:
        // bundledPlugin("com.intellij.java")
    }
}

首先先import导入了一个TestFrameworkType,看来是与测试有关的东西。

然后下一行代码plugins,里面有三个id。

第一个id

Kotlin 复制代码
    id("org.jetbrains.kotlin.jvm")

表示去下载并启用 "Kotlin JVM 编译插件",意思是让 Gradle "学会"编译 Kotlin

第二个id

Kotlin 复制代码
    id("org.jetbrains.changelog")

表示JetBrains 官方的 Changelog(更新日志)管理插件,说白了就是一个日志插件

plugins不知道是什么,但是看里面的内容可以知道

第三个id

Kotlin 复制代码
    id("org.jetbrains.intellij.platform")

表示**让 Gradle 从"普通构建工具"变成"JetBrains 插件专用构建工具",**说白了,就是写插件最关键的部分。无论是代码还是打包插件都需要,

哦,我明白了,plugin英文意思是插件的意思,

plugins的意思是导入其他插件,那三个id本质上都是其他的插件。

原来如下。

继续

Kotlin 复制代码
dependencies {
    testImplementation(libs.junit)

    // IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html
    intellijPlatform {
        intellijIdea("2025.3.5")
        testFramework(TestFrameworkType.Platform)

        // Add plugin dependencies for compilation here, for example:
        // bundledPlugin("com.intellij.java")
    }
}

首先dependencies 是依赖的意思。

那个下面应该就是导入的依赖了。

复制代码
testImplementation(libs.junit)

显然,这个是导入junit这个测试依赖。libs 是 Gradle 的版本目录。

从版本目录里面导入的。

可以在目录gradle里面发现libs.version.toml文件

可以发现其中有junit

原来如此。

接下来就是intellijPlatform。

Kotlin 复制代码
intellijIdea("2025.3.5")

这个的意思是使用idea2025.3.5版本的意思

Kotlin 复制代码
        testFramework(TestFrameworkType.Platform)

这个应该也是和测试有关,不重要。

settings.gradle.kt

Kotlin 复制代码
import org.jetbrains.intellij.platform.gradle.extensions.intellijPlatform

rootProject.name = "fitst"

pluginManagement {
    plugins {
        id("org.jetbrains.kotlin.jvm") version "2.2.20"
        id("org.jetbrains.changelog") version "2.5.0"
    }
}

plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
    id("org.jetbrains.intellij.platform.settings") version "2.16.0"
}

@Suppress("UnstableApiUsage")
dependencyResolutionManagement {
    // Configure all projects' repositories
    repositories {
        mavenCentral()

        // IntelliJ Platform Gradle Plugin Repositories Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-repositories-extension.html
        intellijPlatform {
            defaultRepositories()
        }
    }
}

这个settings.gradle.kts是项目的全局配置文件,管的是整个项目层面的事,

类似rust项目里面的里面的cargo.toml,或者javascript的package.json文件。

首先

Kotlin 复制代码
import org.jetbrains.intellij.platform.gradle.extensions.intellijPlatform

这个import导入了intellijPlatform,应该和写jetbrain插件相关

Kotlin 复制代码
rootProject.name = "fitst"

项目名叫fitst

Kotlin 复制代码
pluginManagement {
    plugins {
        id("org.jetbrains.kotlin.jvm") version "2.2.20"
        id("org.jetbrains.changelog") version "2.5.0"
    }
}

现在很容易理解了,有两个插件和对应的版本

这个pluginManagement,**统一管整个项目的插件版本,**所有子模块,比如上面的build.grad

le.kt,引用同一个插件时,不用再写版本

说白了,这个pluginManagement下的插件是全局的插件。

Kotlin 复制代码
plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
    id("org.jetbrains.intellij.platform.settings") version "2.16.0"
}

这里面也导入了两个插件和相关的版本,那么这些插件就是给settings.gradle.kts 这个文件本身

使用的,具体有什么作用,有点麻烦,不管了,总之,导入局部的插件。

foojay-resolver-convention 是自动下载JDK的

intellij.platform.settings 应该是和jetbarin配置有关

继续

Kotlin 复制代码
@Suppress("UnstableApiUsage")
dependencyResolutionManagement {
    // Configure all projects' repositories
    repositories {
        mavenCentral()

        // IntelliJ Platform Gradle Plugin Repositories Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-repositories-extension.html
        intellijPlatform {
            defaultRepositories()
        }
    }
}

第一行,

Kotlin 复制代码
@Suppress("UnstableApiUsage")

这是一个kotlin注解,

注解 · Kotlin 官方文档 中文版https://book.kotlincn.net/text/annotations.html后面再说,笔者没学过kotlin。哈哈哈哈

如果把这个注解删除,idea就会出现警告

'repositories(org.gradle.api.Action<? super org.gradle.api.artifacts.dsl.RepositoryHandler>)' 使用 @Incubating 标记为不稳定

说明这个注解的作用就是忽视这个警告,静默警告

接下来意思就很简单了,就是下载依赖的地址了

repositories 是 Gradle 的"购物清单地址栏":通用库去 Maven 中央仓库找,JetBrains 平台专属的东西去 JetBrains 自己的仓库找。

说白了,下载依赖的配置。

启动项目

过了不知道多久,终于把全部的依赖都安装好了,

如果安装失败,可能搜索网络问题。笔者也没办法。

什么代码都不改。直接点击最上面的Run Plugin

又下载一些东西

等一段时间。

可以发现出现了新的idea

这个idea的版本的是2025.3.5,说明启动没什么问题。

笔者启动之后,会出现一些警告,感觉不是很重要,不管了。

还有一个错误。笔者换一个idea,2025.2.1,还是又警告,算了

没有错误,也行。

用测试的idea打开一个项目,打开之后

在侧边栏,有一个My Tool Window,

点击,展开,出现一行文字和一个按钮Shuffle

点击按钮,出现一个随机数字。

总结

感觉有点麻烦,后面再说,具体的代码,人晕了,没搞过kotlin和gradle那些

需要消化一下内容

就这样。

相关推荐
_小许_6 小时前
AI IDE 与 Agent Harness:一次说清 Cursor、Codex 该怎么选
ide·人工智能·ai编程·cursor·codex
喆星时瑜10 小时前
探索 Anaconda 中的 JupyterLab、Jupyter Notebook、iPython 解释器(Qt 控制台)和 Spyder IDE
ide·jupyter·ipython
Joy T21 小时前
voice-dump-to-todo:把混乱的语音整理成可执行待办,一个实用的 Agent Skill
ide·macos·语音识别·xcode·任务管理·自研skill
人工智能导论实践课1 天前
【GUI桌面开发3】PyCharm配置外部工具
ide·python·pycharm
JPower_mr.g1 天前
SmartCall v1.0.9 发布:智能体知识库上线,让 AI 客服先查资料再回答
java·ide·人工智能·macos·架构·开源·xcode
Dev _1 天前
PyCharm旧进程仍在后台运行,导致新实例无法启动或连接
ide·python·pycharm
无巧不成书02181 天前
Tomcat部署JSP文件完整指南:手动部署+IDEA工程化实现 附404访问错误全排查
java·ide·windows·tomcat·intellij-idea·js
曹牧1 天前
Eclipse:Subclipse
java·ide·eclipse
allanGold1 天前
Android Studio 无线调试
android·ide·android studio
2501_915106321 天前
iOS 单元测试怎么跑?用 KXApp 在 VS Code 里跑 XCTest 和 Swift Testing
ide·vscode·ios·单元测试·个人开发·swift·敏捷流程