【IDEA插件开发】IntelliJ IDEA 插件开发指南

ops/2025/3/15 15:36:34/

IntelliJ IDEA 插件开发指南

IntelliJ IDEA 是 JetBrains 开发的一款强大的 IDE,支持插件扩展,使其更具灵活性。你可以使用 JavaMaven 构建插件,实现各种自定义功能,比如代码自动生成、重构增强、代码检查等。


1. IDEA 插件开发概述

1.1 什么是 IDEA 插件

  • 插件(Plugin) 是一种扩展 IDEA 的方式,允许开发者添加新功能、增强现有功能或集成外部工具。
  • JetBrains 提供了 IntelliJ Platform SDK,用于开发插件。

1.2 为什么开发 IDEA 插件

  • 提高开发效率:自动化重复任务,例如 Javadoc 生成、代码格式化等。
  • 增强 IDE 功能:添加新工具,如定制代码检查、快捷操作。
  • 集成第三方工具:如数据库管理、API 调试、Git 扩展等。
  • 商业化插件:在 JetBrains Marketplace 发布插件,甚至可以收费。

1.3 IDEA 插件开发者路径

  1. 掌握 Java 基础
    • 面向对象编程
    • 反射、注解、Lambda 表达式
  2. 熟悉 IntelliJ Platform
    • 了解 IntelliJ Platform SDK 结构
    • 学习 PSI(Program Structure Interface)
  3. 掌握 IDEA 插件 API
    • AnAction(操作)
    • PsiElement(代码解析)
    • Editor(文本编辑)
    • Notification(通知)
  4. 使用 Maven 构建插件
    • 依赖 IntelliJ Platform SDK
    • 使用 maven-compiler-pluginidea-plugin
  5. 发布到 JetBrains Marketplace
    • 生成插件 ZIP
    • 注册 JetBrains 开发者账号
    • 提交审核

2. 使用 Maven 构建 IDEA 插件

2.1 创建 Maven 插件项目

mvn archetype:generate -DgroupId=com.example.coolplugin \-DartifactId=cool-java-plugin \-DarchetypeArtifactId=maven-archetype-quickstart \-DinteractiveMode=false

2.2 修改 pom.xml

<project><modelVersion>4.0.0</modelVersion><groupId>com.example.coolplugin</groupId><artifactId>cool-java-plugin</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><intellij.version>2023.2</intellij.version></properties><dependencies><dependency><groupId>com.jetbrains.intellij.platform</groupId><artifactId>core</artifactId><version>${intellij.version}</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.jetbrains.intellij</groupId><artifactId>idea-plugin</artifactId><version>1.3.0</version><configuration><intellijVersion>${intellij.version}</intellijVersion></configuration></plugin></plugins></build>
</project>

3. 编写 Java 代码

3.1 目录结构

cool-java-plugin
├── src
│   ├── main
│   │   ├── java/com/example/coolplugin
│   │   │   ├── GenerateJavaDocAction.java  // 生成 Javadoc
│   │   ├── resources/META-INF/plugin.xml  // 插件注册

java_98">3.2 创建 GenerateJavaDocAction.java

java">package com.example.coolplugin;import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;public class GenerateJavaDocAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent event) {Editor editor = event.getData(com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR);Project project = event.getProject();if (editor == null || project == null) return;PsiFile psiFile = event.getData(com.intellij.openapi.actionSystem.CommonDataKeys.PSI_FILE);if (!(psiFile instanceof PsiJavaFile)) {return;}PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset());if (element == null || !(element.getParent() instanceof PsiMethod)) {return;}PsiMethod method = (PsiMethod) element.getParent();Document document = editor.getDocument();int offset = method.getTextOffset();String javadoc = generateJavadoc(method);document.insertString(offset, javadoc);}private String generateJavadoc(PsiMethod method) {StringBuilder sb = new StringBuilder();sb.append("/**\n * ").append(method.getName()).append("\n");for (PsiParameter param : method.getParameterList().getParameters()) {sb.append(" * @param ").append(param.getName()).append(" ").append(param.getType().getPresentableText()).append("\n");}if (!method.getReturnType().equals(PsiType.VOID)) {sb.append(" * @return ").append(method.getReturnType().getPresentableText()).append("\n");}sb.append(" */\n");return sb.toString();}
}

4. 配置 plugin.xml

📂 src/main/resources/META-INF/plugin.xml

<idea-plugin><id>com.example.coolplugin</id><name>Cool Java Plugin</name><version>1.0.0</version><vendor email="your_email@example.com">Your Name</vendor><actions><action id="com.example.coolplugin.GenerateJavaDocAction"class="com.example.coolplugin.GenerateJavaDocAction"text="Generate Javadoc"description="Automatically generates Javadoc for Java methods"><add-to-group group-id="EditorPopupMenu" anchor="first"/></action></actions>
</idea-plugin>

5. 运行 & 测试

5.1 使用 Maven 运行

mvn clean package

生成插件 JAR 包:

target/cool-java-plugin-1.0-SNAPSHOT.jar

5.2 在 IDEA 中调试

mvn install && mvn idea:run

📌 测试步骤

  1. 右键 Java 方法,点击 Generate Javadoc
  2. Javadoc 自动插入

6. 发布到 JetBrains Marketplace

6.1 生成 ZIP

mvn package

插件文件位置:

target/cool-java-plugin-1.0-SNAPSHOT.zip

6.2 发布

  1. 注册 JetBrains 账号
  2. 进入 插件市场
  3. 上传 cool-java-plugin-1.0-SNAPSHOT.zip
  4. 等待审核

7. 总结

  • 基于 Maven 构建
  • 代码优化,增强可读性
  • 实现 Javadoc 生成功能
  • 支持 IDEA 插件市场发布

🚀 你还希望插件实现哪些 酷炫功能?欢迎讨论!


http://www.ppmy.cn/ops/165973.html

相关文章

将 IPoIB 驱动修改为仅使用 RC 模式

摘要 本文档详细介绍了将 Linux 内核中的 IPoIB(IP over InfiniBand)驱动修改为仅使用 RC(Reliable Connection,可靠连接)模式,并移除所有与 TCP/IP 和以太网相关部分的方法。通过这些修改,可以优化 IPoIB 驱动以适应特定的高性能计算场景,提高数据传输的可靠性和效率…

如何快速检测光模块内部光纤裂纹?

关键词&#xff1a;光纤裂纹、白光干涉、光纤微裂纹检测仪 概述&#xff1a; 随着大数据时代对数据量需求的爆炸式增长&#xff0c;光通信系统也在不断的更新升级。光通信产业链上的光收发模块作为核心组件之一&#xff0c;其性能优劣直接影响系统的通信质量。由于光模块速率…

DeepSeek-R1深度解读

deepseek提出了一种通过强化学习&#xff08;RL&#xff09;激励大语言模型&#xff08;LLMs&#xff09;推理能力的方法&#xff0c;个人认为最让人兴奋的点是&#xff1a;通过RL发现了一个叫“Aha Moment”的现象&#xff0c;这个时刻发生在模型的中间版本中。在这个阶段&…

【品铂科技】在高精度定位行业内的口碑怎么样?

1. ‌技术实力与行业认可‌ 公司自主研发的ABELL无线实时定位系统在复杂环境中&#xff08;如工业、司法监狱等&#xff09;展现出厘米级&#xff08;5-10厘米&#xff09;高精度定位能力&#xff0c;客户反馈系统稳定性强、抗干扰能力突出&#xff0c;成为行业技术标杆‌。参…

第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red和 Black 。 通过对 任何…

视频理解之Actionclip(论文宏观解读)

配合解读代码解读 1.研究背景 1. 视频行为识别的重要性 视频行为识别是视频理解领域的核心任务之一&#xff0c;旨在通过分析视频内容来识别和分类其中的人物行为或活动。这一任务在多个领域具有重要的应用价值&#xff0c;例如智能监控、人机交互、自动驾驶、医疗健康等。随…

HashMap 中的 key 值类型

在 Java 中&#xff0c;HashMap 的 key 一般建议使用 String 而不是自定义对象&#xff0c;主要有以下几个原因&#xff1a; 1. String 是不可变对象&#xff08;Immutable&#xff09; String 在 Java 中是不可变的&#xff0c;一旦创建就不会改变其哈希值 (hashCode)。Hash…

嵌入式学习L6网络编程D7TCP/ip协议

wireshark抓包工具 要下到linux里面去 windos这里要点wife然后就可以抓包 上面是过滤器 eth_ip头原理 就是IPV4 tcp三次握手