赞
踩
首先新建一个 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")) } }
指的是项目的插件依赖
依赖仓库。因为网络的原因,推荐使用国内的源,源地址在 阿里云仓库服务
repositories {
maven("https://maven.aliyun.com/repository/public")
mavenCentral()
}
插件配置
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()
代表空列表。
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());
比较常用的 key 有:
CommonDataKeys.PSI_ELEMENT
返回选中的 PSI 元素数据CommonDataKeys.PROJECT
返回项目数据CommonDataKeys.PSI_FILE
返回选中的 PSI 文件CommonDataKeys.EDITOR
返回选中的编辑器数据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());
}
}
在 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>
在 build.gradle.kts 文件中修改为:
intellij {
version.set("2022.1.4")
type.set("IC")
// plugins.set(listOf(/* Plugin Dependencies */))
plugins.set(arrayListOf("java", "gradle"))
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。