当前位置: 首页 > news >正文

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程

1. 创建 Maven 项目

1.1 使用 IntelliJ 创建 Maven 项目
  1. 打开 IntelliJ IDEA,点击 File > New > Project
  2. 选择 Maven,填写项目名称和 GroupId,例如:
    • GroupId: com.example
    • ArtifactId: my-intellij-plugin
  3. 完成后点击 Finish,生成一个基本的 Maven 项目。

2. 配置 Maven 项目

2.1 修改 pom.xml

添加 IntelliJ Platform 的依赖和插件打包配置:

示例 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-intellij-plugin</artifactId><version>1.0.0</version><properties><!-- IntelliJ Platform 版本 --><idea.version>2023.1</idea.version><java.version>11</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target></properties><dependencies><!-- IntelliJ Platform SDK --><dependency><groupId>com.jetbrains.intellij.platform</groupId><artifactId>platform-api</artifactId><version>${idea.version}</version><scope>provided</scope></dependency><dependency><groupId>com.jetbrains.intellij.platform</groupId><artifactId>platform-impl</artifactId><version>${idea.version}</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- Maven 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!-- IntelliJ IDEA Plugin 插件 --><plugin><groupId>org.jetbrains.intellij</groupId><artifactId>intellij-maven-plugin</artifactId><version>1.14.0</version><configuration><!-- 定义插件的开发平台 --><ideaVersion>${idea.version}</ideaVersion><downloadSources>true</downloadSources></configuration></plugin></plugins></build>
</project>

3. 插件描述文件

src/main/resources/META-INF/ 下创建 plugin.xml,用于描述插件的核心信息和功能。

示例 plugin.xml
<idea-plugin><id>com.example.myplugin</id><name>My IntelliJ Plugin</name><version>1.0.0</version><vendor email="you@example.com" url="https://example.com">Your Name</vendor><!-- 插件扩展点 --><extensions defaultExtensionNs="com.intellij"><actions><action id="MyPlugin.Action" class="com.example.actions.MyAction" text="Generate Code"description="Generate code based on table script"><add-to-group group-id="EditorPopupMenu" anchor="last"/></action></actions></extensions>
</idea-plugin>

4. 实现插件功能

4.1 插件主逻辑

src/main/java/com/example/actions/ 下创建 MyAction.java,实现右键菜单触发的动作。

package com.example.actions;import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;public class MyAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent e) {// 获取当前项目Project project = e.getProject();if (project == null) {Messages.showErrorDialog("No project found", "Error");return;}// 示例:生成的代码String generatedCode = """public class User {private int id;private String name;private String email;public int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getEmail() { return email; }public void setEmail(String email) { this.email = email; }}""";// 显示结果Messages.showInfoMessage(project, "Generated Code:\n" + generatedCode, "Code Generation");}
}

5. 打包和运行插件

5.1 打包插件

运行以下 Maven 命令,将插件打包为 .zip 文件:

mvn package

生成的插件包会在 target/ 目录下,文件名如 my-intellij-plugin-1.0.0.zip

5.2 在 IntelliJ 中运行和测试
  1. 在 IntelliJ IDEA 中打开插件项目。
  2. 点击 Run 或执行以下命令:
    mvn intellij:run
    
    这将启动一个带有插件的新 IntelliJ 实例,用于测试插件功能。
5.3 手动安装插件
  1. 将打包的 .zip 文件上传到 IntelliJ:
    • 菜单:File > Settings > Plugins > Install Plugin from Disk
  2. 重启 IntelliJ,测试插件。

6. 高阶功能扩展

6.1 动态调用 Python 脚本

可以在插件中调用 Python 服务完成复杂任务,例如代码生成。

示例:调用 Python REST 服务

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;public class PythonIntegration {public static String invokePythonAPI(String payload) throws Exception {HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(new URI("http://localhost:5000/generate")).POST(HttpRequest.BodyPublishers.ofString(payload)).header("Content-Type", "application/json").build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());return response.body();}
}

6.2 与项目文件交互

让插件直接修改项目中的代码文件。

示例:写入代码到文件

import com.intellij.openapi.vfs.VirtualFile;public class FileWriter {public static void writeToFile(VirtualFile file, String content) throws Exception {file.setBinaryContent(content.getBytes());}
}

7. 发布插件

7.1 打包插件

运行 mvn package,生成 .zip 文件。

7.2 发布到 JetBrains 插件市场
  1. 登录 JetBrains Plugin Repository。
  2. 上传 .zip 文件,并填写插件描述。

总结

通过 Maven 开发 IntelliJ 插件,与 Gradle 类似,只需修改 pom.xml 并添加 IntelliJ Platform 的依赖。Maven 更适合习惯于使用 Maven 的开发者,功能上并无限制。

相关文章:

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA&#xff0c;点击 File > New > Project。选择 Maven&#xff0c;填写项目名称和 GroupId&#xff0c;例如&#xff1a; GroupId: com.exampl…...

Windows修复SSL/TLS协议信息泄露漏洞(CVE-2016-2183) --亲测

漏洞说明&#xff1a; 打开链接&#xff1a;https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel 可以看到&#xff1a; 找到&#xff1a;应通过配置密码套件顺序来控制 TLS/SSL 密码 我们…...

uniapp生命周期:应用生命周期和页面生命周期

文章目录 1.应用的生命周期2.页面的生命周期 1.应用的生命周期 生命周期的概念&#xff1a;一个对象从创建、运行、销毁的整个过程被称为生命周期 生命周期函数&#xff1a;在生命周期中每个阶段会伴随着每一个函数的出发&#xff0c;这些函数被称为生命周期函数 所有页面都…...

基于SSM的婴幼儿用品商城系统+LW示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;产品管理、产品分类、会员管理、订单管理、秒杀活动、文章管理、数据统计等&#xff09;、普通用户&#xff08;登录注册、个人中心、购物车、我的收藏、各类信息查看等&#xff09;技术选型&#xff1a;SSM&#xff0c;jsp…...

【工具变量】城市供应链创新试点数据(2007-2023年)

一、测算方式&#xff1a;参考C刊《经济管理》沈坤荣和乔刚老师&#xff08;2024&#xff09;的做法&#xff0c;使用“供应链创新与应用试点”的政策虚拟变量&#xff08;TreatPost&#xff09;表征。若样本城市为试点城市&#xff0c;则赋值为 1&#xff0c;否则为 0&#xf…...

【carla生成车辆时遇到的问题】carla显示的坐标和carlaworld中提取的坐标y值相反

项目需要重新运行了一下generate_car.py的脚本&#xff0c;发现死活生成不了&#xff0c;研究了半天&#xff0c;发现脚本里面生成车辆的坐标值y和carla_ros_bridge_with_example_ego_vehicle.launch脚本打开的驾驶操控界面里面的y值正好是相反数! y1-y2 因为&#xff0c;我运行…...

Jira使用笔记二 ScriptRunner 验证问题创建角色

背景 最近在对公司Jira工作流改造&#xff0c;收到这么一个要求&#xff1a;某些问题类型只有某些角色可以创建。本来是想通过Jira内建的权限控制来处理的。结果点到权限页面&#xff0c;心都凉透了。 好吧&#xff0c;那只能上脚本了。最终使用ScriptRunner的Simple scripte…...

Java线程的使用

Java中的线程是用来实现多任务并发执行的机制。在Java中&#xff0c;主要有两种方式来创建和使用线程&#xff1a;实现Runnable接口和继承Thread类。 实现Runnable接口&#xff1a; 创建一个类&#xff0c;实现Runnable接口&#xff0c;并重写run()方法。在run()方法中定义线程…...

自动化测试工具Ranorex Studio(四十三)-RANOREXPATH编辑器5

代码示例 下面的代码示例将讲解如何使用Ranorex API来编写代码模块&#xff0c;或者是使用用户代码来扩展录制的模块。 在代码中使用对象库 使用对象库等待UI元素 建立Adapter来访问更多的属性和方法 为对象库元素建立一组Adapter 使用Validate类 强制一个测试用例失败 设置aut…...

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…...

数据结构(Java)—— ArrayList

1.线性表 线性表&#xff08; linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是在…...

实习冲刺第三十三天

102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…...

Uniapp开发下拉刷新功能onPullDownRefresh/onReachBottom

文章目录 1.onPullDownRefresh2.onReachBottom 1.onPullDownRefresh 在 js 中定义 onPullDownRefresh 处理函数&#xff08;和onLoad等生命周期函数同级&#xff09;&#xff0c;监听该页面用户下拉刷新事件。 需要在 pages.json 里&#xff0c;找到的当前页面的pages节点&am…...

什么是 C++ 中的函数对象?函数对象与普通函数有什么区别?如何定义和使用函数对象?

1) 什么是 C 中的函数对象&#xff1f;它有什么特点&#xff1f; 在 C 中&#xff0c;函数对象&#xff08;也称为仿函数或 functor&#xff09;是一种重载了 operator() 的对象。这意味着这些对象可以像函数一样被调用。函数对象通常用于需要传递行为&#xff08;即代码&…...

PointNet++论文复现

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

【VUE】el-table表格内输入框或者其他控件规则校验实现

1、封装组件 1、规则校验一般基于form表单实现&#xff0c;因此需要给具体控件套一层form表单 新建组件input-required.vue&#xff0c;内容如下 <template><div><el-form ref"formRef" :model"form" :rules"formRules" label-…...

django开发中html继承模板样式

存在问题&#xff1a; django开发中&#xff0c;不同页面样式相同&#xff0c;如何共用一套母版&#xff0c;避免每个页面都重复写样式&#xff1b; 解决方案&#xff1a; 添加一个母版&#xff0c;如“layout.html”&#xff0c;在需要继承的位置添加{% block content %}{% e…...

MT6769/MTK6769核心板规格参数_联发科安卓主板开发板方案

MT6769安卓核心板具有集成的蓝牙、FM、WLAN和GPS模块&#xff0c;是一个高度集成的基带平台&#xff0c;结合了调制解调器和应用处理子系统&#xff0c;以支持LTE/LTE-A和C2K智能手机应用。 该芯片集成了两个工作频率高达2.0GHz的ARMCortex-A75内核、六个工作频率高达1.70GHz的…...

鸿蒙进阶篇-状态管理之@Provide与@Consume

大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习一下状态管理中的Provide与Consume。 一、概述 嘿&#xff01;大家还记得这张图吗&#xff1f;不记得也要记得哦&#xff0c;因为这张图里的东西&#xff0c;既是高频必考面试题&#xff0c;也是实际开发中&…...

java集合及源码

目录 一.集合框架概述 1.1集合和数组 数组 集合 1.2Java集合框架体系 常用 二. Collection中的常用方法 添加 判断 删除 其它 集合与数组的相互转换 三Iterator(迭代器)接口 3.0源码 3.1作用及格式 3.2原理 3.3注意 3.4获取迭代器(Iterator)对象 3.5. 实现…...

AI编程助手效率革命:结构化配置与提示词工程实战

1. 项目概述&#xff1a;一个为AI编程时代量身定制的开发者工具箱如果你和我一样&#xff0c;日常开发已经离不开像 Cursor 和 Claude 这样的 AI 编程助手&#xff0c;那你肯定也遇到过类似的困扰&#xff1a;每次开启一个新项目&#xff0c;或者在不同项目间切换时&#xff0c…...

AI安全控制框架:应对能力超越控制的风险与韧性防御策略

1. 项目概述&#xff1a;当能力超越控制“Project Glasswing”这个名字本身就充满了隐喻。玻璃翼&#xff0c;轻盈、透明、脆弱&#xff0c;却又能在阳光下折射出复杂的光谱。这像极了我们今天要讨论的核心议题&#xff1a;人工智能的能力边界正以前所未有的速度扩张&#xff0…...

别再只用轮盘赌了!遗传算法选择算子实战对比:Python代码实现与性能调优心得

遗传算法选择算子深度实战&#xff1a;从轮盘赌到锦标赛的Python优化指南 在解决复杂优化问题时&#xff0c;遗传算法展现出了惊人的适应能力。但许多开发者止步于基础的轮盘赌选择&#xff08;Roulette Wheel Selection&#xff09;&#xff0c;却不知不同选择策略对算法性能的…...

Jellyfin智能片头检测解决方案:Intro Skipper插件技术指南

Jellyfin智能片头检测解决方案&#xff1a;Intro Skipper插件技术指南 【免费下载链接】intro-skipper Fingerprint audio to automatically detect and skip intro sequences in Jellyfin 项目地址: https://gitcode.com/gh_mirrors/in/intro-skipper Intro Skipper是一…...

Modbus RTU 与 Modbus TCP 深入指南-结束语

结束语本指南涵盖了Modbus RTU和Modbus TCP的物理层、数据链路层、报文格式、CRC算法、通信模型、功能码详解、性能优化、安全加固、故障排查、工程实践、过渡策略及现代替代方案。核心要点回顾&#xff1a;RTU&#xff1a;串口&#xff0c;远距离&#xff0c;简单可靠&#xf…...

AJV布尔验证终极指南:掌握JSON Schema中最简单的数据类型处理技巧

AJV布尔验证终极指南&#xff1a;掌握JSON Schema中最简单的数据类型处理技巧 【免费下载链接】ajv The fastest JSON schema Validator. Supports JSON Schema draft-04/06/07/2019-09/2020-12 and JSON Type Definition (RFC8927) 项目地址: https://gitcode.com/gh_mirror…...

2026终极指南:如何一键重置JetBrains IDE试用期,享受无限期免费开发体验

2026终极指南&#xff1a;如何一键重置JetBrains IDE试用期&#xff0c;享受无限期免费开发体验 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾因JetBrains IDE试用期到期而中断开发工作&#xff1f;每次…...

在Hermes Agent项目中集成Taotoken实现自定义模型供应商的切换

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中集成Taotoken实现自定义模型供应商的切换 1. 场景与目标 Hermes Agent 是一个功能强大的智能体开发框架&…...

OpenClaw 接入微信 / 企业微信完整教程

本文介绍如何通过 OpenClaw 框架&#xff0c;将个人微信和企业微信接入 AI Agent&#xff0c;实现「AI 自动回复」的功能。适用于树莓派、Mac/Windows 电脑、NAS 或云服务器等各类设备。 一、环境准备 1.1 安装 OpenClaw OpenClaw 是核心运行环境&#xff0c;负责加载插件、管…...

书匠策AI让我的课程论文从“赶死线“变成了“喝茶局“

先交代背景。 上个月&#xff0c;我接了一个"极限挑战"&#xff1a;一周五门课&#xff0c;四门要交课程论文&#xff0c;最短的截止日期只剩48小时。 说实话&#xff0c;那一刻我脑子里只有两个字——完蛋。 但作为一个天天教别人写论文的博主&#xff0c;我总不…...