前言

最近一直都在使用网络上的工具类,所以就想移植到IDEA中使用,也能顺带了解下IDEA插件大致的开发流程,网络上IDEA插件基础资料还是有很多,其他复杂功能则就需要查看官方文档和一些其他的开源项目。

跑通插件开发Demo

新建项目

填写工程名称,工程就可以直接创建成功,最好是选择java开发,kotlin我尝试的时候swing布局会报错
How to build a plugin for IntelliJ-based IDEs :插件教程
Fully-featured GitHub template:插件模版

plugin.xml 插件核心配置文件:

<idea-plugin>

  <!-- 插件唯一id,不能和其他插件项目重复,所以推荐使用com.xxx.xxx的格式
  插件不同版本之间不能更改,若没有指定,则与插件名称相同 -->
  <id>com.your.company.unique.plugin.id</id>

  <!-- 插件名称,别人在官方插件库搜索你的插件时使用的名称 -->
  <name>Plugin display name here</name>

  <!-- 插件版本号 -->
  <version>1.0</version>

  <!-- 供应商主页和email(不能使用默认值,必须修改成自己的)-->
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>
  <!-- 插件的描述 (不能使用默认值,必须修改成自己的。并且需要大于40个字符)-->
  <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</em>
    ]]></description>
  <!-- 插件版本变更信息,支持HTML标签;
  将展示在 settings | Plugins 对话框和插件仓库的Web页面 -->
  <change-notes><![CDATA[
    Add change notes here.<br>
    <em>most HTML tags may be used</em>
    ]]>
  </change-notes>

  <!-- 插件兼容IDEAbuild 号-->
  <idea-version since-build="173.0"/>

  <!-- 插件所依赖的其他插件的id -->
  <depends>com.intellij.modules.platform</depends>

  <extensions defaultExtensionNs="com.intellij">
    <!-- 声明该插件对IDEA core或其他插件的扩展 -->
  </extensions>

  <!-- 编写插件动作 -->
  <actions>
  </actions>

</idea-plugin>

build.gradle 项目配置文件:

plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm") version "1.6.20"
    id("org.jetbrains.intellij") version "1.7.0"
    id("org.jetbrains.changelog") version "1.3.0"
    // Gradle Qodana Plugin
    id("org.jetbrains.qodana") version "0.1.12"
}

/** 当前插件版本 **/
group = "com.example"
version = "1.0-SNAPSHOT"

/** 依赖库 **/
repositories {
    mavenCentral()
}

/** 当前开发的IDEA版本 **/
intellij {
    // 开发Android Studio 依赖设置,localPath.set与version.set不能同时存在,因为已经拿到版本信息
    localPath.set("/Applications/Android Studio.app/Contents")
    plugins.set(listOf("Kotlin","android","git4idea","java"))
    //    version.set("2022.2")
    //    type.set("IC") // Target IDE Platform
    //    // 开发依赖插件
    //    plugins.set(listOf(/* Plugin Dependencies */))
}

tasks {
    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "11"
        targetCompatibility = "11"
    }
    withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions.jvmTarget = "11"
    }

    patchPluginXml {
        // 插件适用的IDEA版本范围
        sinceBuild.set("213")
        untilBuild.set("223.*")
        // 版本更新记录
           changeNotes.set("")
    }

    signPlugin {
        certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
        privateKey.set(System.getenv("PRIVATE_KEY"))
        password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
    }

    publishPlugin {
        token.set(System.getenv("PUBLISH_TOKEN"))
    }
}
Action :动作

New -> Plugin DevKit -> Action

Action ID: 当前Action的唯一Id
Class Name:Action对应处理类的类名
Name:插件显示在菜单上的名称
Description:鼠标悬浮于按钮上时,界面底部显示的描述
Add to Group:功能按钮的添加位置、Action:设置Action在组中的位置、Anchor:相对于选中Action的前或后

  1. 生成的Action类

    public class TestAction extends AnAction {
    
     @Override
     public void actionPerformed(AnActionEvent e) {
         // TODO: insert action logic here
     }
    }
  2. 自动生成对应Plugin配置信息

    <action id="test" class="com.example.decrypt_idea_plugin.TestAction" text="测试" description="测试">
      <add-to-group group-id="ToolsMenu" anchor="first"/>
    </action>
  3. 添加弹窗代码

    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.ui.Messages;
    
    public class TestAction extends AnAction {
    
     @Override
     public void actionPerformed(AnActionEvent e) {
         Messages.showInfoMessage("测试","测试弹窗");
     }
    }
    
  4. 编译运行

点击右侧Gradle面板->Tasks->Intellij->runIde,运行启动一个指定版本的idea
or
有个Run Plugin则可以,直接点击run图标

  1. 点击菜单栏Tools,就能找到刚刚编写动作测试,点击就会触发弹窗提示
  2. 打包插件并部署

点击右侧Gradle面板->Tasks->Intellij->buildPlugin,编译产物左侧build->distributions目录下

安装方式如下

最后修改:2023 年 06 月 17 日
如果觉得我的文章对你有用,请随意赞赏