仓库目录
这一页回答"哪个文件该放哪"。三块代码分属三个 git 仓库(没有共同根,各自提交), 所以目录结构本身就是一条约定:先看它属于哪个仓库,再决定改哪里。
本章节其它页面讲"为什么这么设计";这一页只讲"东西在哪"。 目录是照着实际文件系统读出来的(2026-10 工作区),不是凭记忆写的 —— 结构变了请重读一遍再改这一页。
三个仓库
| 仓库 | 内容 | 默认分支 |
|---|---|---|
wujies-platform | 后端(Java / Spring Boot)+ 平台 SQL 脚本 | feature/app-market |
wujies/wujies-plugins | 插件本体 + 插件前端工程(pnpm workspace)+ 打包器 + 文档 | master |
plus-ui | 宿主前端(Vue 3 / Vite) | feature/app-market |
三者没有共同 git 根:改一个功能经常要跨仓库提交两到三次。
一、wujies-platform/ —— 后端
反应堆根 pom.xml 的 <modules> 只有 4 个聚合模块:
wujies-admin、wujies-common、wujies-extend、wujies-modules。
wujies-platform/
├── pom.xml 反应堆根:<modules> 只列上面 4 个聚合模块
├── AGENTS.md ★ 改代码前扫一遍的"不变量与已知坑"清单(权威,优先级最高)
├── wujies-admin/ 后端启动模块(Java)。产物 wujies-admin.jar
│ ├── Dockerfile
│ └── src/ PluginClassPathLoader 在这里(Spring 之前执行)
├── wujies-common/ 基础设施,27 个子模块(见下)
├── wujies-extend/ 旁挂服务,独立进程
│ ├── wujies-monitor-admin/ 监控端
│ └── wujies-snailjob-server/ 定时任务调度服务端
├── wujies-modules/ 业务模块,只剩 4 个
│ ├── wujies-app-market/ ★ 应用市场:目录 + 安装编排 + 插件运行时 + 包安全
│ ├── wujies-system/ 系统管理(用户 / 部门 / 角色 / 菜单 / 字典 / OSS / 消息)
│ ├── wujies-workflow/ 工作流
│ └── wujies-plugin-probe/ 插件运行时探针
├── script/ 运维与数据脚本
│ ├── sql/ 平台建表脚本 + 增量脚本
│ ├── prune/ 启动前清理插件 jar(prune-plugins.ps1 / start-host.ps1)
│ ├── docker/ · bin/ · leave/
├── deploy/ 部署物料与工具
│ ├── 1panel/ 1Panel 应用包定义
│ ├── docker/ · dist/
│ └── tools/ 种子 SQL / 迁移拆分等生成器(Node 脚本)
├── plugins-dist/ ★ 插件 jar 的落位目录(loader.path 指向它,只读根下、不递归)
│ ├── active-plugins.txt 本机启用清单:不在清单里的 jar 不挂载
│ ├── wujies-<app>-plugin-<版本>.jar
│ └── migrations/<appCode>/ 随包迁移脚本(子目录,刻意不会被当插件加载)
├── dist-packages/ ⚠️ **历史**产物目录(打包器早已不再往这里写,见插件仓库那棵树)
├── docs/ 平台侧文档与 SQL 片段
└── logs/ 运行日志wujies-common/ 的 27 个子模块
wujies-common/
├── wujies-common-bom/ BOM:统一版本,供插件 POM 导入
├── wujies-common-core/ ★ 平台核心。PluginServiceProvider / MenuOwnershipProvider
│ (宿主反查插件与菜单归属的 SPI 契约放这里)
├── wujies-common-web/ GlobalExceptionHandler(异常 → 前端的唯一出口)
├── wujies-common-plugin-sdk/ ★ 插件扩展点契约(FollowRelationApi / Platform*Api …)
├── wujies-common-mybatis/ MyBatis-Plus 集成(BaseMapperPlus 等)
├── wujies-common-tenant/ 多租户
├── wujies-common-satoken/ Sa-Token 鉴权集成
├── wujies-common-security/ 安全配置(security.excludes 白名单等)
├── wujies-common-redis/ Redis
├── wujies-common-oss/ 对象存储
├── wujies-common-job/ 定时任务宿主侧支持(任务实现随应用走)
├── wujies-common-sms/ 短信
├── wujies-common-mail/ 邮件
├── wujies-common-social/ 社会化登录
├── wujies-common-sse/ SSE 推送
├── wujies-common-websocket/ WebSocket
├── wujies-common-rabbitmq/ RabbitMQ(队列 / 交换机 / 绑定要在宿主声明)
├── wujies-common-ratelimiter/ 限流
├── wujies-common-idempotent/ 幂等
├── wujies-common-log/ 操作日志
├── wujies-common-excel/ Excel 导入导出
├── wujies-common-json/ JSON 序列化
├── wujies-common-encrypt/ 字段加解密
├── wujies-common-sensitive/ 数据脱敏
├── wujies-common-translation/ 字段翻译
├── wujies-common-phone-verify/ 手机号校验
└── wujies-common-doc/ 接口文档⚠️ 这里没有
*-api契约模块(2026-09-30 起数量为 0):契约随插件走, 见 必须遵守的不变量。
二、wujies/wujies-plugins/ —— 插件仓库
pnpm workspace 根(package.json 的 name 是 wujies-plugins-workspace)。
注意它同时在工作区的子目录 wujies/ 下,不是工作区顶层。
wujies/wujies-plugins/
├── wujies-<app>/ 插件后端,每个自包含(11 个):
│ ├── enterprise/ exam/ finance/ gallery/ hello/ im/
│ ├── mall/ member/ pay/ quote/ social/
│ ├── app.json 清单:菜单、assets、迁移声明(菜单的唯一真相)
│ ├── migrations/*.sql 建表 + 种子数据 + 字典 + 站点配置(按文件名排序执行)
│ ├── src/main/java/cn/wujies/<app>/
│ │ domain / BO / VO / Mapper 接口 + XML / Service / controller
│ ├── pom.xml 平台依赖一律 <scope>provided</scope>
│ ├── package.ps1 打包器(构建 + 签名 + 组装 zip)
│ ├── release.ps1 发布一个版本(读源 app.json 的 version → 打包 → 打 tag → 推 tag)
│ └── target/ 本模块构建输出(不进仓库)
├── frontend/ 插件前端工程(pnpm workspace 的成员,每个 app 一个)
│ ├── build/ 共用构建底座:host-source.ts(复刻宿主源码别名)/ vite.ts
│ ├── gallery-app/ exam-app/ im-app/ pay-app/ quote-app/ social-app/
│ ├── mall-app/ member-app/ enterprise-app/ finance-app/ hello-app/
│ ├── <code>-app/package.json · vite.config.ts(outDir 必须等于 remote-apps/<code>)
│ └── <code>-app/src/ 远程视图(独立 ESM 产物)
├── sandbox/ 插件沙箱(独立 Maven 工程 + run.ps1,不含业务)
├── keys/ 签名密钥:private.pem(**已 gitignore,绝不进仓库**)/ public.pem
├── dist-packages/ ⚠️ **历史**产物目录(2026-10-05 起不再写入,仍在 .gitignore 里)
├── docs/ 插件仓库自己的文档(开发指南、打包教程、解耦路线图…)
├── package.json · pnpm-workspace.yaml · pnpm-lock.yaml 前端工程的工作区定义
├── package.ps1 仓库级打包脚本(-Plugin / -SigningKey / -Keygen / -SyncPublicKey)
└── pom.xml 插件后端的 Maven 聚合 POM⚠️ 前端产物目录名必须等于 appCode:frontend/<code>-app 的 outDir、
defineRemoteApp 的 appCode、后端落位目录、GET /app/runtime/remote-apps 拼出的 URL
四处是同一个约定。少一个 -app 就是"菜单永远点不开"。
⚠️ 应用包的落点在这两棵树之外(所以上面两处 dist-packages/ 都标了"历史"):
打包器的默认输出目录是 <插件仓库的上一级>\.plugin-dist\<appCode>\<版本>\,
本机即 C:\Users\TX\Desktop\ruoyi\wujies\.plugin-dist\(与插件仓库平级的另一棵目录)。
放在仓库外是有意的:产物不会被任何仓库的 git 看到,也不会被仓库的 clean 顺手删掉。
见打包应用。
三、plus-ui/ —— 宿主前端
plus-ui/
├── package.json ⚠️ 它的 name 是 wujies-admin(命名陷阱的根源)
├── vite.config.ts · uno.config.ts · eslint.config.ts · tsconfig.json · index.html
├── src/ 宿主源码
│ ├── api/ · assets/ · components/ · composables/ · directive/ · enums/ · hooks/
│ ├── lang/ · layout/ · router/ · store/ · types/ · utils/ · views/
│ └── plugins/appmarket/ 应用市场前端运行时:远程应用装载、菜单刷新、形态自检、可用性探测
├── vite/ 构建期插件
│ ├── plugins/ 各 vite 插件(auto-import / components / compression / icons / unocss …)
│ ├── auto-import.ts ★ 自动导入宇宙 —— 插件工程必须逐项对齐,否则远程产物裸全局
│ ├── appMarketStatic.ts 远程应用的静态清单(开发兜底)
│ └── index.ts · setup-extend.ts
├── scripts/ Node 守门脚本:audit-menus / check-remote-apps /
│ check-remote-globals / check-runtime-shims / gen-runtime-shims / svg2ico
├── bin/ 本机批处理:run-web.bat / build.bat / package.bat
├── public/ · html/ 静态资源
├── app-market-dist/ 市场产物落位:app-runtime/ + remote-apps/
├── dist/ 构建输出
└── node_modules/四、命名陷阱:wujies-admin 有三个意思
同一个名字在三处含义不同,历史上已经因此误导过两次排查。
依据:wujies-platform/AGENTS.md §0。
| 写法 | 实际指 | 怎么认出来 |
|---|---|---|
wujies-platform/wujies-admin/ | 后端启动模块(Java) | 有 pom.xml / src/main / Dockerfile;产物是 wujies-admin.jar |
工作区顶层的 wujies-admin/ | 前端产物的落位目录,里面只有 app-market-dist/ | 没有 package.json、没有 src/;app-market-dist/remote-apps/ 是产物落点 |
plus-ui/ | 宿主前端仓库(Vue 3 / Vite) | 有 vite.config.ts / src/;package.json 的 name = wujies-admin |
判断口诀(AGENTS.md §0 原话的意思):
- 凡是指向
src/plugins/**、src/views/**、app-market-dist/**的路径 → 都是前端 =plus-ui/; - 凡是指向
src/main/resources/**、wujies-admin.jar、mvn -pl wujies-admin的 → 都是后端 =wujies-platform/wujies-admin/。
⚠️ 还有一个不在任何 git 仓库里的目录要说清楚:工作区最外层还有一个 docs/
(松散副本 + 教程记录),改它不会有人知道。要长期保留的内容请放
wujies/wujies-plugins/docs/ 或 wujies-platform/docs/。