使用 Maven 开发 IntelliJ IDEA 插件
使用 Maven 开发 IntelliJ IDEA 插件的完整流程
1. 创建 Maven 项目
1.1 使用 IntelliJ 创建 Maven 项目
- 打开 IntelliJ IDEA,点击
File > New > Project。 - 选择
Maven,填写项目名称和 GroupId,例如:- GroupId:
com.example - ArtifactId:
my-intellij-plugin
- GroupId:
- 完成后点击
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 中运行和测试
- 在 IntelliJ IDEA 中打开插件项目。
- 点击
Run或执行以下命令:
这将启动一个带有插件的新 IntelliJ 实例,用于测试插件功能。mvn intellij:run
5.3 手动安装插件
- 将打包的
.zip文件上传到 IntelliJ:- 菜单:
File > Settings > Plugins > Install Plugin from Disk。
- 菜单:
- 重启 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 插件市场
- 登录 JetBrains Plugin Repository。
- 上传
.zip文件,并填写插件描述。
总结
通过 Maven 开发 IntelliJ 插件,与 Gradle 类似,只需修改 pom.xml 并添加 IntelliJ Platform 的依赖。Maven 更适合习惯于使用 Maven 的开发者,功能上并无限制。
相关文章:
使用 Maven 开发 IntelliJ IDEA 插件
使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA,点击 File > New > Project。选择 Maven,填写项目名称和 GroupId,例如: GroupId: com.exampl…...
Windows修复SSL/TLS协议信息泄露漏洞(CVE-2016-2183) --亲测
漏洞说明: 打开链接:https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel 可以看到: 找到:应通过配置密码套件顺序来控制 TLS/SSL 密码 我们…...
uniapp生命周期:应用生命周期和页面生命周期
文章目录 1.应用的生命周期2.页面的生命周期 1.应用的生命周期 生命周期的概念:一个对象从创建、运行、销毁的整个过程被称为生命周期 生命周期函数:在生命周期中每个阶段会伴随着每一个函数的出发,这些函数被称为生命周期函数 所有页面都…...
基于SSM的婴幼儿用品商城系统+LW示例参考
1.项目介绍 功能模块:管理员(产品管理、产品分类、会员管理、订单管理、秒杀活动、文章管理、数据统计等)、普通用户(登录注册、个人中心、购物车、我的收藏、各类信息查看等)技术选型:SSM,jsp…...
【工具变量】城市供应链创新试点数据(2007-2023年)
一、测算方式:参考C刊《经济管理》沈坤荣和乔刚老师(2024)的做法,使用“供应链创新与应用试点”的政策虚拟变量(TreatPost)表征。若样本城市为试点城市,则赋值为 1,否则为 0…...
【carla生成车辆时遇到的问题】carla显示的坐标和carlaworld中提取的坐标y值相反
项目需要重新运行了一下generate_car.py的脚本,发现死活生成不了,研究了半天,发现脚本里面生成车辆的坐标值y和carla_ros_bridge_with_example_ego_vehicle.launch脚本打开的驾驶操控界面里面的y值正好是相反数! y1-y2 因为,我运行…...
Jira使用笔记二 ScriptRunner 验证问题创建角色
背景 最近在对公司Jira工作流改造,收到这么一个要求:某些问题类型只有某些角色可以创建。本来是想通过Jira内建的权限控制来处理的。结果点到权限页面,心都凉透了。 好吧,那只能上脚本了。最终使用ScriptRunner的Simple scripte…...
Java线程的使用
Java中的线程是用来实现多任务并发执行的机制。在Java中,主要有两种方式来创建和使用线程:实现Runnable接口和继承Thread类。 实现Runnable接口: 创建一个类,实现Runnable接口,并重写run()方法。在run()方法中定义线程…...
自动化测试工具Ranorex Studio(四十三)-RANOREXPATH编辑器5
代码示例 下面的代码示例将讲解如何使用Ranorex API来编写代码模块,或者是使用用户代码来扩展录制的模块。 在代码中使用对象库 使用对象库等待UI元素 建立Adapter来访问更多的属性和方法 为对象库元素建立一组Adapter 使用Validate类 强制一个测试用例失败 设置aut…...
超高流量多级缓存架构设计!
文章内容已经收录在《面试进阶之路》,从原理出发,直击面试难点,实现更高维度的降维打击! 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…...
数据结构(Java)—— ArrayList
1.线性表 线性表( linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在…...
实习冲刺第三十三天
102.二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例…...
Uniapp开发下拉刷新功能onPullDownRefresh/onReachBottom
文章目录 1.onPullDownRefresh2.onReachBottom 1.onPullDownRefresh 在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事件。 需要在 pages.json 里,找到的当前页面的pages节点&am…...
什么是 C++ 中的函数对象?函数对象与普通函数有什么区别?如何定义和使用函数对象?
1) 什么是 C 中的函数对象?它有什么特点? 在 C 中,函数对象(也称为仿函数或 functor)是一种重载了 operator() 的对象。这意味着这些对象可以像函数一样被调用。函数对象通常用于需要传递行为(即代码&…...
PointNet++论文复现
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
【VUE】el-table表格内输入框或者其他控件规则校验实现
1、封装组件 1、规则校验一般基于form表单实现,因此需要给具体控件套一层form表单 新建组件input-required.vue,内容如下 <template><div><el-form ref"formRef" :model"form" :rules"formRules" label-…...
django开发中html继承模板样式
存在问题: django开发中,不同页面样式相同,如何共用一套母版,避免每个页面都重复写样式; 解决方案: 添加一个母版,如“layout.html”,在需要继承的位置添加{% block content %}{% e…...
MT6769/MTK6769核心板规格参数_联发科安卓主板开发板方案
MT6769安卓核心板具有集成的蓝牙、FM、WLAN和GPS模块,是一个高度集成的基带平台,结合了调制解调器和应用处理子系统,以支持LTE/LTE-A和C2K智能手机应用。 该芯片集成了两个工作频率高达2.0GHz的ARMCortex-A75内核、六个工作频率高达1.70GHz的…...
鸿蒙进阶篇-状态管理之@Provide与@Consume
大家好,这里是鸿蒙开天组,今天我们来学习一下状态管理中的Provide与Consume。 一、概述 嘿!大家还记得这张图吗?不记得也要记得哦,因为这张图里的东西,既是高频必考面试题,也是实际开发中&…...
java集合及源码
目录 一.集合框架概述 1.1集合和数组 数组 集合 1.2Java集合框架体系 常用 二. Collection中的常用方法 添加 判断 删除 其它 集合与数组的相互转换 三Iterator(迭代器)接口 3.0源码 3.1作用及格式 3.2原理 3.3注意 3.4获取迭代器(Iterator)对象 3.5. 实现…...
从电源到复位:深入拆解STM32最小系统每个电路模块的设计考量与选型避坑
从电源到复位:深入拆解STM32最小系统每个电路模块的设计考量与选型避坑 在嵌入式系统开发中,STM32系列微控制器因其出色的性能和丰富的外设资源而广受欢迎。然而,即使是看似简单的STM32最小系统设计,也蕴含着大量值得深入探讨的工…...
LiuJuan Z-Image Generator参数详解:CFG Scale=2.0与12步生成高质量人像
LiuJuan Z-Image Generator参数详解:CFG Scale2.0与12步生成高质量人像 想用AI生成一张惊艳的人像照片,却发现要么细节模糊,要么风格怪异,怎么调参数都达不到理想效果?如果你也遇到过类似问题,那今天这篇文…...
all-MiniLM-L6-v2开发者案例:集成至LangChain实现动态RAG检索链路
all-MiniLM-L6-v2开发者案例:集成至LangChain实现动态RAG检索链路 在构建智能问答或文档分析系统时,一个核心挑战是如何从海量文本中快速、准确地找到最相关的信息。传统的基于关键词的搜索,往往因为无法理解语义而“答非所问”。今天&#…...
Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站
Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站 1. 产品概览 Gemma-3 Pixel Studio是基于Google最新开源Gemma-3-12b-it模型构建的高性能多模态对话终端。这个预配置的Docker镜像消除了复杂的部署流程,让用户能够立即体验12B参数大模型…...
OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧
OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧 1. 为什么需要关注Token消耗 当我第一次在本地部署OpenClaw并接入GLM-4.7-Flash模型时,最让我震惊的不是它的自动化能力,而是执行简单任务后查看账单时的Token消耗数字。一个看似…...
2026权威评测:盘点毕业论文AIGC免费降重神器
【CSDN 资深算法架构师 / NLP技术专栏 导读】 各位还在发际线边缘挣扎的应届生和硕博党们,到了2026年,如果你的电脑里还装着那种老掉牙的“同义词替换”降重软件,我劝你赶紧停手! 最近CSDN社群里哀嚎一片:“知网查重过…...
【VASP脚本进阶】Perl脚本解析:Materials Studio原子约束信息如何精准写入POSCAR
1. Perl脚本在VASP计算中的关键作用 做材料模拟的朋友们肯定都遇到过这样的场景:在Materials Studio里精心搭建好模型,设置完原子约束,结果导出到VASP时发现固定原子的信息全丢了。这种时候,一个靠谱的Perl脚本简直就是救命稻草。…...
如何让实验室管理“更简单”?——King’s LIMS以灵活与智能,重构高效运营新范式
在日常实验室管理中,流程繁琐、数据难溯源、报告生成低效、多场景管控混乱等问题,常成为拖慢运营节奏、抬升运维成本的“隐形阻力”。要打破管理困局、实现轻量化高效运维,选对数字化工具是关键。然而,在选择LIMS的过程中…...
Linux Ubuntu 24.04 Server 超简单部署 Fast GPT(新手零踩坑)
前言: Fast GPT 是一款基于大语言模型的知识型平台,支持数据处理、RAG检索、可视化AI工作流编排,能快速搭建专属问答系统,无需复杂开发配置。本文针对 Ubuntu 24.04 Server 系统,用最简洁的步骤完成部署,全…...
这份榜单够用!盘点2026年用户挚爱的一键生成论文工具
一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的一键生成论文工具,覆盖选题构思、文献综述、数据整理、格式排版等核心场景,高效搞定论文不再只是梦想。 一、全流程王者:一站式搞定论文全链路(一…...
