让我们从头开始写一个IDEA插件吧!

295 阅读3分钟

目前,公司主流的Java开发还是使用的是Eclipse。Eclipse作为一个上古时代的开发IDE,确实有着十分重要的地位。但是,为了提高开发效率,我们还是应该要尝试使用一些目前更为主流,效率也更高的开发工具——IDEA。 然而,公司目前只有一个代码规范的Eclipse插件。在IDEA上,依然没有一个公司的规范的插件,于是,我打算开始学习如何去写一个IDEA的插件以弥补这方面空缺。

新建你的插件项目

点击文件-新建-项目

image.png

然后选择IDE 插件:

image.png

点击创建,即可创建你的第一个插件项目。

你会得到一个项目目录:

image.png

目录部分文件解释:

settings.gradle.kts - 指明当前项目的名称。

gradle-wrapper.properties - 指明使用的gradle版本,如果有必要,它会自动去下载一个必须的gradle版本。

src.mian.resources.META-INF - 该文件夹下存储的是插件项目的相关配置文件。

build.gralde.kts - gradler的构建文件


plugins {
    id("java")
    id("org.jetbrains.intellij") version "1.7.0"
}

//向导中所写的组名
group = "com.sitr"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
//指明被用来创建该插件的IDEA版本和IDEA类型(如IC就是旗舰版)
intellij {
    version.set("2021.3")
    type.set("IC") // Target IDE Platform

    plugins.set(listOf(/* Plugin Dependencies */))
}

tasks {
    // Set the JVM compatibility versions
    //被注入来强制使用JDK11来编译Java源码
    withType<JavaCompile> {
        sourceCompatibility = "11"
        targetCompatibility = "11"
    }
    //指定用于构建插件的最大版本和最小版本相兼容
    patchPluginXml {
        sinceBuild.set("213")
        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"))
    }
}

添加你的第一个Action吧!

你的第一个定制的Action需要继承一个抽象类AcAction。该Action应该覆盖AnAction的update()方法,且必须覆盖actionPerformed()方法。 AnAction类最好不要有任何类型的字段,这种限制是为了避免内存泄露。

update()方法实现的代码是可以使用或不可以使用这个Action。

actionPerformed()方法实现的是去执行一个被用户援引的action的代码。


public class firstAction extends AnAction {

    //目前这样,是表示该插件无论何时都会执行
    @Override
    public void update(@NotNull AnActionEvent e) {
        super.update(e);
    }

    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {

    }
}

把你的Action注册到IDEA上

在实现firstAction这个类之前,要先把这个Action注册到IDEA上。 要注册一个Action,可以通过两种方式: 1. 在代码上声明 2. 在配置文件plugin.xml上的标签上进行声明

image.png

如果我们不在IDEA上注册该Action,则会提示:

image.png

为了注册该firstAction和设置其基本的参数,按下Alt+Shift+Enter。填好这个New Action表单来为firstAction设置参数。或者点击 注册操作。

image.png

新的表单如图:

image.png

image.png

表单字段解释:

字段解释
操作 ID每个Action都必须有一个独立的id,最好使用限定名
类名类的全限定名
名称将会出现在菜单的文字
描述要显示的提示语
添加到组Action将要被添加到的菜单或者工具栏
定位标记表示该Action应该放的位置

如图,填好后,点击确定。我们就创建了一个在工具栏的一个Action了。 此时我们在plugin.xml文件中的标签,也自动添加了新的内容:

image.png

这里的内容跟我们之前在新Action的表单上填写的内容是 一致的。

以上,我们就在工具栏添加了我们的第一个按钮了。(虽然并没有什么卵用)

运行你的插件

我们点击 运行。

image.png

运行完之后,就会出现一个新的IDEA界面。我们使用这个新的IDEA界面随便创建一个项目,然后查看它的工具栏上的菜单tools。

image.png

这个Tools上的第一个Action就是我们刚刚编写的插件的内容了。