当前位置: 首页 > 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. 实现…...

8_Harness驾驭工程实践:企业级落地与OpenAI案例解析

8_Harness驾驭工程实践&#xff1a;企业级落地与OpenAI案例解析 关键字&#xff1a; 企业级落地、OpenAI、Ryan Lopopolo、Codex、Harness Engineering、Citi Bank、Ancestry、Ulta Beauty、Agent-First开发、部署策略、自托管、成本优化、迁移路径、最佳实践、0行手写代码、百…...

告别复杂配置:SDXL 1.0电影级绘图工坊开箱即用体验

告别复杂配置&#xff1a;SDXL 1.0电影级绘图工坊开箱即用体验 1. 为什么选择SDXL 1.0电影级绘图工坊 在AI绘图领域&#xff0c;Stable Diffusion XL&#xff08;SDXL&#xff09;1.0代表了当前最先进的文本到图像生成技术。然而&#xff0c;对于大多数非技术背景的创作者来说…...

Citra 3DS模拟器:如何在PC端重温任天堂经典游戏的终极指南

Citra 3DS模拟器&#xff1a;如何在PC端重温任天堂经典游戏的终极指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra 想要在Windows、Linux或macOS系统上体验《精灵宝可梦》、《塞尔达传说》等经典3DS独占游戏吗…...

Qwen3-0.6B-FP8快速上手:无需CUDA环境的CPU友好型大模型对话工具指南

Qwen3-0.6B-FP8快速上手&#xff1a;无需CUDA环境的CPU友好型大模型对话工具指南 想体验大模型对话&#xff0c;但被动辄几十GB的模型和昂贵的显卡劝退&#xff1f;今天给大家介绍一个“小钢炮”——Qwen3-0.6B-FP8对话工具。它只有6亿参数&#xff0c;经过FP8量化后体积小巧&…...

Llama-3.2V-11B-cot镜像免配置:内置模型加载进度条与超时重试机制

Llama-3.2V-11B-cot镜像免配置&#xff1a;内置模型加载进度条与超时重试机制 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境深度优化。这个工具解决了传统大模型部署中的多个痛点&#xf…...

Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例

Qwen3-ASR-0.6B惊艳效果&#xff1a;藏语、维吾尔语等少数民族语言识别案例 1. 引言&#xff1a;多语言语音识别的突破 语音识别技术正在改变我们与设备交互的方式&#xff0c;但有一个领域一直存在巨大挑战——少数民族语言的识别。传统的语音识别模型往往只支持主流语言&am…...

力扣原题《长度最小的子数组》,有序版(理想版最大值查找)纯手搓,已验证,方差版(考虑元素离散,大值周围全是小值的情况)在下一篇

理想版&#xff0c;大值周围是大值 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例…...

C++ 模板与泛型编程入门

C 模板与泛型编程入门 模板把类型&#xff08;及非类型参数&#xff09;作为参数&#xff0c;在编译期由编译器按用法生成具体函数或类&#xff0c;是 C 泛型编程与 STL 的基础。下文以 Max、简单类模板、选择排序及可定制比较器为例说明常见写法&#xff1b;排序复杂度为 (O(…...

深度解析Windows微信自动化:Wechaty Puppet XP零成本架构设计与实战指南

深度解析Windows微信自动化&#xff1a;Wechaty Puppet XP零成本架构设计与实战指南 【免费下载链接】puppet-xp Wechaty Puppet WeChat Windows Protocol 项目地址: https://gitcode.com/gh_mirrors/pu/puppet-xp 在即时通讯自动化领域&#xff0c;Windows平台微信机器…...

vLLM实战:手把手教你用LLMEngine构建高效推理服务(附代码解析)

vLLM实战&#xff1a;从零构建高性能大模型推理服务的工程指南 当大语言模型从实验室走向生产环境时&#xff0c;如何实现高吞吐、低延迟的推理服务成为工程化落地的关键挑战。vLLM作为当前最受关注的开源推理框架之一&#xff0c;其核心组件LLMEngine的设计理念值得每一位AI工…...