当前位置:   article > 正文

Idea插件开发_idea 插件打包

idea 插件打包

首先新建一个 idea 插件项目,在新建的地方,选择 IDE Plugin,JDK 需要 11 以上。在这里插入图片描述

配置文件

build.gradle.kts 是项目的配置文件。

plugins {   
    id("java")  
    id("org.jetbrains.intellij") version "1.10.1"  
}  
group = "com.wtsm"  
version = "1.0-SNAPSHOT"  
repositories {  
    mavenCentral()  
}  
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html  
intellij {  
    version.set("2022.1.4")  
    type.set("IC") 
    plugins.set(listOf(/* Plugin Dependencies */)) 
}  
tasks {  
    // Set the JVM compatibility versions  
    withType<JavaCompile> {  
        sourceCompatibility = "11"  
        targetCompatibility = "11"  
    }  
    patchPluginXml {  
        sinceBuild.set("221")  
        untilBuild.set("231.*")  
    }  
    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"))  
    }  
}
  • 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

指的是项目的插件依赖

repositories

依赖仓库。因为网络的原因,推荐使用国内的源,源地址在 阿里云仓库服务

repositories {  
    maven("https://maven.aliyun.com/repository/public")  
    mavenCentral()  
}
  • 1
  • 2
  • 3
  • 4

intellij

插件配置

version.set("2022.1.4") 表示的是插件开发所基于的 idea 版本

type.set("IC") 表示插件所运行的 idea 分发平台,IC 代表 idea 社区版,IU 代表 idea 旗舰版,其他版本可以参考 Gradle IntelliJ Plugin | IntelliJ Platform Plugin SDK

plugins.set(listOf()) 表示的是需要用到的 idea 插件商店里的插件,listOf() 代表空列表。

tasks

withType<JavaCompile> 表示的是 JDK 版本,插件运行在不同的版本需要满足最低的 JDK 版本

patchPluginXml 修补 plugin.xml 文件。sinceBuild.set("221") 表示插件运行最低支持 idea 版本, 221 表示 2022.1 版本; untilBuild.set("231.*") 表示插件运行最高支持的版本。

实现

首先创建一个 Action
在这里插入图片描述

字段解释
Action ID动作的唯一 id
Class Name动作的类名
Name名字
Add to Group把动作添加到该组,Groups 是组名,例如 ProjectViewPopupMenu 指的是项目右键弹出的菜单,EditorPopupMenu 指的是编辑器右键菜单,Actions 指的是该组的动作,Anchor 指的是新建动作在 Actions 指定动作的相对位置
Keyboard shortcuts快捷键

点击确定后会自动生成一个动作类,同时会在 resources/META-INF 目录下的 plugin.xml 文件中生成动作的注册信息。

HelloAction 动作类自动继承了 AnAction 类,我们需要在其 actionPerformed() 方法下实现该动作的逻辑。

通过 e.getData(DataKey<T> key) 可以获取项目的数据,例如:

PsiElement data = e.getData(CommonDataKeys.PSI_ELEMENT);  
System.out.println("PsiElement:"+data.getText());
  • 1
  • 2

比较常用的 key 有:

  1. CommonDataKeys.PSI_ELEMENT 返回选中的 PSI 元素数据
  2. CommonDataKeys.PROJECT 返回项目数据
  3. CommonDataKeys.PSI_FILE 返回选中的 PSI 文件
  4. CommonDataKeys.EDITOR 返回选中的编辑器数据
    PSI (Program Structure Interface) 指的是程序结构接口,用于解析和创建源文件。PsiElement 有很多的实现类,例如 PsiField(属性)、PsiVariable(变量)、PsiClass(类)、PsiMethod(方法)等。
    一个例子是把选中的文字在控制台打印出来:
public class HelloAction extends AnAction {  
    @Override  
    public void actionPerformed(AnActionEvent e) {  
        PsiElement data = e.getData(CommonDataKeys.PSI_ELEMENT);  
        System.out.println(data.getText());  
    }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行与安装

在 Gradle 下找到 runIde,右键运行项目,也支持 debug。

在这里插入图片描述

打包需要运行 buildPlugin,idea 会在 build/distributions 目录下生成插件的 jar 包,然后在插件安装那里选择 lnstall Plugin from Disk

在这里插入图片描述

其他问题

如果在使用 PsiJavaFile 变量时,提示 NoClassDefFoundError: com/intellij/psi/PsiJavaFile 错误,这是因为缺少 java 模块依赖导致的,需要在 plugin.xml 文件中,添加:

<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.java</depends>
  • 1
  • 2
  • 3

在 build.gradle.kts 文件中修改为:

intellij {  
	version.set("2022.1.4")  
    type.set("IC") 
    // plugins.set(listOf(/* Plugin Dependencies */)) 
    plugins.set(arrayListOf("java", "gradle"))  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/112123?site
推荐阅读
相关标签
  

闽ICP备14008679号