我正在参与「启航方案」

背景

IDEA/Android Studio 插件开发系列教程,文章链接如下:

IDEA 插件开发教程(一)

IDEA 插件开发教程(二)

作为运用 IDEA/Android Studio 的开发者,咱们或多或少都运用过插件,随着开发工具的版别晋级,很多插件会呈现兼容性问题,而作者可能几年前就现已中止保护了。

如果咱们能把握一些插件开发知识,遇到中止保护的插件,就能够主动着手保护了,如果自己有一些主意,甚至能够自己开发插件。

现在网上关于 IDEA 插件的教程十分少,而且有些教程时间比较长远,很多配置都现已发生改动,所以接下来我方案写几篇关于开发 IDEA 插件的教程,希望能够帮助到咱们。

本文是教程的第一篇,通过本文你能够新建一个简单的 HelloWorld 插件项目,了解 IDEA 插件开发的环境建立,了解 IDEA 插件的项目结构。

开发工具

开发 IDEA 插件,需要下载 IDEA, 下载地址: www.jetbrains.com/zh-cn/idea/… 挑选免费的 Community 版别即可。

创立项目

翻开 IDEA,点击 New Project , 然后挑选 IDE Plugin,如下图所示

IDEA 插件开发教程(一)

输入插件项目相关信息,然后点击 Create 按钮创立项目,项目结构如下:

DxyJsonToDart
├── .idea
│   └── .gitignore
│   └── gradle.xml
│   └── misc.xml
│   └── vcs.xml
├── .run
│   └── Run IDE with Plugin.run.xml
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   │       └── META-INF
│   │           └── plugin.xml
│   │           └── pluginIcon.svg
├── .gitignore
├── build.gradle.kts
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

开发过 Android 项目的,对这个项目结构应该会了解一些,和 Android 项目基本差不多,咱们的代码会写到 src/main/java/包名 中,build.gradle.kts 是 Gradle 的配置文件 plugin.xml 是插件的配置文件,在插件开发中,咱们会经常和这两个配置文件打交道。

下面咱们大约看一下 build.gradle.kts 文件:

plugins {
    id("java")
    id("org.jetbrains.intellij") version "1.6.0"
}
group = "cn.dxy.app"
version = "1.0-SNAPSHOT"
repositories {
    mavenCentral()
}
intellij {
    version.set("2021.3")
    type.set("IC") 
    plugins.set(listOf(/* Plugin Dependencies */))
}
tasks {
    withType<JavaCompile> {
        sourceCompatibility = "11"
        targetCompatibility = "11"
    }
    patchPluginXml {
        sinceBuild.set("212")
        untilBuild.set("223.*")
    }
    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"))
    }
}

这个文件中的配置信息详细是什么意思,后续会讲到,暂时先不论。这时咱们什么代码没有写,直接运转项目,由于在上面配置了 version.set("2021.3"),运转时会下载一个 2021.3 版别的 IDEA。这个 IDEA 大约有 1~2G 巨细,下载成功后,这个 IDEA 会运转起来,运转结果如下图所示。

IDEA 插件开发教程(一)

如果你切换到 Plugins 选项,你会发现咱们开发的插件被主动安装到这个 IDEA 中了。

我第一次免除插件开发时有点蒙:一个 IDEA 运转发动了别的一个 IDEA。后来我才想通,由于咱们的插件是要运转在 IDEA/Android Studio 中的,咱们的插件适配不同的版别,还要进行代码调试,所以只能一个 IDEA 运转发动了别的一个 IDEA。

主张咱们着手实践一下,会有更加直观的感受。

新建 Action

想一下咱们平时是如何运用插件的,咱们可能是右键点击了文件夹,或者是点击了某个菜单,这时会弹出一些选项,这些选项一般就是某个插件的进口,这些进口在 IDEA 插件中叫做 Action

下面咱们写点代码,看看如何创立一个 Action,在项目的代码包中,点击右键,New => Plugin DevKit => Action,能够创立一个 Action

IDEA 插件开发教程(一)

添加 Action 相关信息

IDEA 插件开发教程(一)

在上图中,Add to Group 挑选的是 Groups: NewGroup(New) Action: NewFile(File) Anchor: First,那么咱们新建的这个 Action 就会呈现在 New 这个选项中的第一个方位

点击确定按钮后,会新增一个承继 AnAction 的类 DxyJsonToDartAction

package cn.dxy.app.dxyjsontodart;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class DxyJsonToDartAction extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
    }
}

而且会在 plugin.xml 中新增这个 action

<actions>
    <action id="DxyJsonToDart" class="cn.dxy.app.dxyjsontodart.DxyJsonToDartAction" 
        text="我是 name" description="我是 description">
        <add-to-group group-id="NewGroup" anchor="first"/>
    </action>
</actions>

这时咱们再运转插件,看看咱们刚刚编写的代码有什么作用:

IDEA 发动后,咱们随意翻开一个项目,在文件夹上,点击右键,能够看到 New 菜单中呈现了咱们刚开发的插件选项 我是 name

IDEA 插件开发教程(一)

引证其它插件

咱们写的插件,能够依靠其它插件,依靠其它插件之后,能够运用它们的类

官方文档:plugins.jetbrains.com/docs/intell…

翻开项目 build.gradle.kts 文件,把 plugins.set() 中的代码修正如下:

intellij {
    version.set("2021.3")
    type.set("IC") // Target IDE Platform
    plugins.set(
        listOf(
            "Dart:213.5744.122", //https://plugins.jetbrains.com/plugin/6351-dart/versions
            "io.flutter:63.2.4",//https://plugins.jetbrains.com/plugin/9212-flutter/versions/stable
            "GsonFormatPlus:1.6.1",//https://plugins.jetbrains.com/plugin/14949-gsonformatplus/versions
            "com.jack.plugin.autojson:1.5", //https://plugins.jetbrains.com/plugin/11600-autojson/versions
            "com.crzsc.FlutterAssetsGenerator:2.0.0",//https://plugins.jetbrains.com/plugin/15427-flutterassetsgenerator/versions
            "com.ruiyu.ruiyu:4.4.2", //https://plugins.jetbrains.com/plugin/11415-flutterjsonbeanfactory-only-null-safety-/versions
        )
    )
}

再次运转项目,运转成功后,切换到 Plugin 选项,如下图所示:

IDEA 插件开发教程(一)

咱们能够看到,这次运转的 IDEA 会把上面引入的插件那些插件全部打包安装了。

最后

本篇教程就写到这了,如果咱们着手进行了实践,相信会对 IDEA 插件开发会有一个大约的了解了。

更多内容,会在后续的教程中介绍。

别的,咱们对那些方面感兴趣,也能够留言谈论,如果我知道的话,也会进行共享。