• idea插件开发- hello world


    1.本文环境

    idea 版本=2021.2.2
    java 版本=11
    电脑=macbook m1

    在这里插入图片描述
    确认是否安装了下面插件:
    在这里插入图片描述

    2.新建插件项目

    使用gradle创建
    在这里插入图片描述
    选择位置
    在这里插入图片描述
    新建成的项目结构:
    在这里插入图片描述

    SDK切换

    新建后项目使用的jdk11. 保持不变也能运行,但最好切换到插件SDK
    方法如下
    在这里插入图片描述
    然后默认,选择jdk11
    再在project settions 中选择新加的sdk
    在这里插入图片描述

    build.gradle文件

    使用阿里云仓库

    plugins {
        id 'org.jetbrains.intellij' version '1.9.0'
        id 'java'
    }
    
    group 'org.example'
    version '1.0-SNAPSHOT'
    
    repositories {
        maven {
            url 'https://maven.aliyun.com/repository/public/'
        }
        mavenLocal()
        mavenCentral()
    }
    
    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    }
    
    // See https://github.com/JetBrains/gradle-intellij-plugin/
    intellij {
        version = '2021.2.2'
        plugins = ['com.intellij.java']
    }
    patchPluginXml {
        changeNotes = """
          Add change notes here.
    most HTML tags may be used"""
    } test { useJUnitPlatform() }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    必须加上plugins = ['com.intellij.java'] 不然启动会报找不到类。

    刷新依赖
    在这里插入图片描述

    3.新建第一个action

    在这里插入图片描述

    动作配置
    在这里插入图片描述
    这样就有了第一个动作类
    在这里插入图片描述

    动作类中实现第一个hello world

    package com.demo;
    
    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.actionSystem.CommonDataKeys;
    import com.intellij.openapi.actionSystem.PlatformDataKeys;
    import com.intellij.openapi.project.Project;
    import com.intellij.openapi.ui.Messages;
    import com.intellij.psi.PsiFile;
    
    public class Action1 extends AnAction {
    
        @Override
        public void actionPerformed(AnActionEvent e) {
            //获取当前在操作的工程上下文
            Project project = e.getData(PlatformDataKeys.PROJECT);
    
            //获取当前操作的类文件
            PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
            //获取当前类文件的路径
            String classPath = psiFile.getVirtualFile().getPath();
            String title = "Hello World!";
    
            //显示对话框
            Messages.showMessageDialog(project, classPath, title, Messages.getInformationIcon());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    plugin.xml中会自动添加Action信息
    在这里插入图片描述

    <idea-plugin>
        <id>org.example.ide-plugin-demo2id>
        <name>Plugin display name herename>
        <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompanyvendor>
    
        <description>
        most HTML tags may be used
        ]]>description>
    
        
        <depends>com.intellij.modules.platformdepends>
        <depends>com.intellij.modules.langdepends>
        <depends>com.intellij.modules.javadepends>
    
        <extensions defaultExtensionNs="com.intellij">
            
        extensions>
    
        <actions>
            
            <action id="action001" class="com.demo.Action1" text="动作1" description="第一个测试动作">
                <add-to-group group-id="GenerateGroup" anchor="first"/>
            action>
        actions>
    idea-plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4.启动项目并验证插件

    点启动按钮或runide都可以
    在这里插入图片描述
    运行后会重新运行一个ide
    这个idea 里面默认就安装了我们开发的插件
    在这里插入图片描述

    新建或随便打开一个项目
    然后验证插件是否可以用

    类中鼠标右键,找到generate
    在这里插入图片描述
    找到我们自定义的动作
    在这里插入图片描述
    弹出了我们设置的弹出框
    在这里插入图片描述
    第一个插件,到此完成。

    爬坑

    若启动没问题,运行时报错

    NoClassDefFoundError: com/intellij/psi/PsiJavaFile
    
    • 1

    有依赖,就是一直报找不到类。
    报错是NoClassDefFoundError: com/intellij/psi/PsiJavaFile,找不到intellij平台的PsiJavaFile类。

    这是一个intellij平台插件兼容性的问题。
    笔者猜测IDEA 2020启动插件的时候,默认不再包含Java language PSI Model模块。

    因此需要将模块依赖添加到插件的配置文件plugin.xml中,添加进去之后是这样的:

    <depends>com.intellij.modules.platformdepends>
    <depends>com.intellij.modules.langdepends>
    <depends>com.intellij.modules.javadepends>
    
    • 1
    • 2
    • 3
  • 相关阅读:
    万人场景下传输挑战和演进实践
    基于Quartz实现动态定时任务
    AUTOSAR CAN主动与被动唤醒分析
    常用的数字格式代码
    View绘制流程1-View与Window的关系
    Mybatics-连接配置
    AOP获取通知以及实际应用
    【MySQL篇】授权:授权与回收
    宏转录组分析揭示不同土壤生境中氮循环基因的表达
    【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理
  • 原文地址:https://blog.csdn.net/A434534658/article/details/126717119