3 分钟自建 IntelliJ 私有插件仓库:一键发布IntelliJ插件到自定义仓库
Jetbrains Plugin Publisher是一款开源工具,帮助团队将IntelliJ系列插件发布到自建仓库(如Artifactory/S3),自动生成updatePlugins.xml。支持Web拖拽上传或Gradle命令一键发布,解决内网安全合规需求,免去手动维护插件列表的麻烦。提供Docker快速部署方案,支持Artifactory/MinIO等多种存储后端,实现插件在企业内部的高效
内网安全合规?不想把插件发到 JetBrains Marketplace?想把团队内部的 IntelliJ 系列插件(IDEA、PyCharm、WebStorm、GoLand…)放到自建插件仓库里统一分发?不想每次都手动维护 updatePlugins.xml?这就是 jetbrains-plugin-publisher 的使命:拖拽上传 / 一条 Gradle 命令,自动生成与更新 updatePlugins.xml,立即可被 IDE 识别安装。
项目地址:https://github.com/xooooooooox/jetbrains-plugin-publisher
这是什么?
Jetbrains Plugin Publisher 是一个开箱即用的小工具,用来把 IntelliJ 平台插件(IntelliJ IDEA、PyCharm、WebStorm、Rider 等)发布到自建插件仓库(如 Artifactory、MinIO/S3 或任何支持 HTTP PUT/S3 API 的存储)。
它提供两种使用方式:
- Web UI(Bridge 模式): 拖拽
.jar/.zip插件包,所见即所得地上传、生成 updatePlugins.xml; - 命令行/无头模式:容器内直接执行
gradle uploadPlugin -Pfile=...一条命令。 
效果预览(Web UI)

• 左侧:选择 Bridge 模式 → 拖拽上传插件包;
• 右侧:配置发布目标(Base URL、下载前缀、认证等);
• 下方:进度、日志与结果。
为什么要用自建插件仓库?
JetBrains 官方文档明确支持自定义插件仓库:只要在一个可访问的 HTTPS 地址上提供 updatePlugins.xml,IDE 就能像连官方市场一样安装/更新你的插件。  
这带来几个典型场景价值:
• 内网/保密环境:插件只给公司内部用;
• 更快发布:无需等待 Marketplace 审核;
• 多渠道:按“稳定版/灰度版/内部测试版”等划分渠道分发(JetBrains 也支持自定义发布渠道)。 
适用场景
- 企业/组织内部发布专有插件(合规与权限可控)
- 开发/测试/预发布多渠道分发(多 Bucket/多路径)
- 离线/半离线网络(镜像在内网,IDE 只需能访问仓库)
- 与现有制品库打通(Artifactory、S3、MinIO 等)
一图看懂工作流
[Plugin JAR/ZIP]
|
v (拖拽 / 一条 Gradle 命令)
+-----------------------------+
| jetbrains-plugin-publisher |
| - Web UI / Gradle Task |
+-----------------------------+
| 上传 (PUT/S3)
v
[Artifactory / MinIO / S3]
|
+--> [updatePlugins.xml] <--- 自动生成/更新
|
v
JetBrains IDE (Settings -> Plugins -> Manage Repositories)
IDE 配置自定义仓库后,可像连接 Marketplace 一样安装/搜索/更新插件。
3 分钟快速上手
只要 Docker 即可起飞。
方式 A:docker run 一键启动
docker run --rm --name jetbrains-plugin-publisher \
-p 9876:9876 \
-e ARTIFACTORY_TOKEN=*********** \
-e PUBLISHER_BASE_URL='https://artifactory.example.com/artifactory/jetbrains-plugin-local' \
-e PUBLISHER_DOWNLOAD_PREFIX='https://artifactory.example.com/artifactory/jetbrains-plugin-local' \
-e PUBLISHER_REPO='artifactory' \
-e PUBLISHER_XML_NAME='updatePlugins.xml' \
-v "$PWD:/work" \
xooooooooox/jetbrains-plugin-publisher
打开浏览器访问 http://127.0.0.1:9876/,拖拽 .jar/.zip 即可上传,updatePlugins.xml 也会自动生成/更新。 
方式 B:docker compose 启动
services:
jpp:
container_name: jetbrains-plugin-publisher
image: xooooooooox/jetbrains-plugin-publisher
ports: ["9876:9876"]
environment:
ARTIFACTORY_TOKEN: ${ARTIFACTORY_TOKEN:-}
PUBLISHER_BASE_URL: ${PUBLISHER_BASE_URL:-https://artifactory-oss.example.com/artifactory/jetbrains-plugin-local}
PUBLISHER_DOWNLOAD_PREFIX: ${PUBLISHER_DOWNLOAD_PREFIX:-https://artifactory-oss.example.com/artifactory/jetbrains-plugin-local}
PUBLISHER_REPO: ${PUBLISHER_REPO:-artifactory}
PUBLISHER_XML_NAME: ${PUBLISHER_XML_NAME:-updatePlugins.xml}
volumes:
- $PWD:/work
restart: unless-stopped
方式 C:命令行(容器内 Gradle 一条龙)
# 进入已运行容器
docker exec -it jetbrains-plugin-publisher bash
# 上传单个插件(最简)
gradle -q uploadPlugin -Pfile=/work/your-plugin-1.2.3.jar
# 或者带上完整参数(覆盖 since/until、feed 文件名等)
gradle -q uploadPlugin \
-Pfile=/work/your-plugin-1.2.3.jar \
-PpluginId=com.yourco.yourplugin \
-PpluginVersion=1.2.3 \
-PsinceBuild=241 \
-PuntilBuild=251.* \
-PpluginName=com.yourco.yourplugin \
-PbaseUrl="$PUBLISHER_BASE_URL" \
-PdownloadUrlPrefix="$PUBLISHER_DOWNLOAD_PREFIX" \
-PxmlName="${PUBLISHER_XML_NAME:-updatePlugins.xml}"
认证优先级:-Ptoken/-Pbasic(命令行)→ 环境变量 → gradle.properties→ ~/.config/jpp/jpp.properties。 
配置一览(常用项对照)
| 用途 | Gradle 属性 | 环境变量 | 说明 |
|---|---|---|---|
| 仓库类型 | repo / publisher.repo |
PUBLISHER_REPO |
artifactory(REST PUT)、s3、minio |
| 基础 URL(上传) | baseUrl / publisher.baseUrl |
PUBLISHER_BASE_URL |
二进制文件和 updatePlugins.xml 的目标根路径 |
| 下载 URL 前缀 | downloadUrlPrefix / publisher.downloadUrlPrefix |
PUBLISHER_DOWNLOAD_PREFIX |
IDE 在订阅源中看到的内容 |
| 订阅文件 | xmlName / publisher.xmlName |
PUBLISHER_XML_NAME |
默认为 updatePlugins.xml |
| 令牌(Bearer) | token / publisher.token |
ARTIFACTORY_TOKEN、PUBLISHER_TOKEN |
首选 |
| 基本认证 | basic / publisher.basic |
PUBLISHER_BASIC |
格式 user:pass(少见) |
| S3/MinIO 密钥 | auth / publisher.minioAuth |
MINIO_AUTH、AWS_ACCESS_KEY_ID |
用于 S3/MinIO 模式 |
让 IDE 识别你的私有仓库
- IDE 中打开 Settings → Plugins;
- 点击齿轮图标 → Manage Plugin Repositories;
- 添加你的 feed 地址(直接指向 updatePlugins.xml);
- 之后就能在 Marketplace 页签里看到你仓库中的插件了。


与其他方案的对比
-
手工维护
updatePlugins.xml容易出错、费时费力。该项目自动 upsert,发布即更新清单。
-
直接使用第三方上传脚本/库
比如 plugin_uploader。本项目将其作为引擎集成,提供Web UI + 容器化一体化体验,开箱即用。
-
只发到 JetBrains Marketplace
适合公开分发。若需要私有/内网/灰度渠道或合规管控,自建仓库更合适。官方文档明确支持自定义仓库。
常见问答(FAQ)
Q1:必须手写 updatePlugins.xml 吗?
不需要。上传后项目会自动创建或更新该文件。
Q2:是否支持解析 plugin.xml 自动填参数?
支持。UI 会解析 plugin.xml 预填 ID/版本/IDE Build 范围。
Q3:只能用 Artifactory 吗?
不,只要能通过 HTTP PUT 或 S3 API 上传即可(如 MinIO/S3)。
Q4:IDE 怎么配置使用?
在 Manage Plugin Repositories 里添加 updatePlugins.xml URL 即可。
参与贡献 & 交流
欢迎 Star / PR / Issue:
https://github.com/xooooooooox/jetbrains-plugin-publisher
如果这个项目为你的团队节省了时间,也欢迎在 CSDN/博客/公众号分享你的落地实践 : )
更多推荐


所有评论(0)