v5.x 当前版本 · 平台极小,应用外置
平台极小,应用外置,装完即用
应用市场式插件平台:平台极小、应用外置、装完即用。业务能力以插件应用的形式从市场安装,全程不需要重启宿主。

平台工作台总览
/images/home/hero-dashboard.png截图完成后放到 public 对应路径即可自动替换,无需改代码。
- 官方应用
- 11
- 菜单项
- 508
- 页面视图
- 100
- 权限按钮
- 408
界面一览
装完之后长这样
工作台、应用市场、开发台、菜单归属、消息中心与系统设置,都是同一套宿主里的页面。

工作台:应用入口与运行状态
/images/docs/workplace.png截图完成后放到 public 对应路径即可自动替换,无需改代码。

应用市场:安装、升级与卸载
/images/docs/app-market.png截图完成后放到 public 对应路径即可自动替换,无需改代码。

应用开发台:一键开发与打包
/images/docs/plugin-console.png截图完成后放到 public 对应路径即可自动替换,无需改代码。

菜单归属:每个菜单属于哪个应用
/images/docs/menu-ownership.png截图完成后放到 public 对应路径即可自动替换,无需改代码。

消息中心:站内信与系统通知
/images/docs/message-center.png截图完成后放到 public 对应路径即可自动替换,无需改代码。

系统设置:站点、登录、存储与客户端
/images/docs/settings-tabs.png截图完成后放到 public 对应路径即可自动替换,无需改代码。
项目生态
五个工程,一套平台
平台后端 + 插件仓库 + 三个前端工程,各自独立构建、独立部署。
wujies-platform
后端平台Spring Boot 3 + MyBatis-Plus 多模块宿主:应用市场、插件运行时、多租户与系统底座。
wujies/wujies-platformwujies-hello-plugin
应用与插件业务应用本体(一个应用一个仓库):自包含后端工程、迁移脚本、app.json 与前端远程产物。
wujies/wujies-hello-pluginwujies-admin
管理端前端Vue 3 + Element Plus 管理端,同时承担远程应用前端的运行期宿主。
wujies/wujies-adminwujies-web
PC 用户端面向终端用户的 PC Web:商城、会员、社交、IM、考试与图床等应用页面。
wujies/wujies-webwujies-uniapp
移动端uni-app 一套代码编译到 H5、App 与微信小程序等多端。
wujies/wujies-uniapp核心能力
平台极小,能力外置
平台只负责底座与契约,业务能力以应用形式独立构建、独立发布、按需安装。
应用外置
业务模块独立打包成「应用」(后端 jar + 前端远程产物),从应用市场安装 / 升级 / 卸载,宿主不重新构建。
契约随应用走
平台里没有 *-api 契约模块,平台对 cn.wujies.<app>.* 的 Java 引用为 0。每个应用是自包含的一个工程。
热插拔
每个应用一个独立类加载器与 Spring 子上下文。装了就进路由清单与登录检查,卸了就出清单,不需要重启。
多租户
应用按租户安装与授权;菜单归属可追溯,管理员改不坏、也删不掉应用声明的菜单。
包安全
产物白名单 + 分离式签名(signature.txt 覆盖除自身外全部文件);三档模式 off / warn / enforce,默认 enforce。
一键部署
提供 1Panel 应用包(平台两形态 + 定时任务调度中心 + 服务监控中心),容器首次启动自动建库建表。
适合这些场景
- 一套系统交付多个客户,客户之间的功能组合不同。
- 客户临时加模块,但不能停机、不能重新发版。
- 想做应用市场 / 插件生态,让第三方上架应用。
- 想把「平台」与「业务」的边界固化在工程结构里。
这些情况直接用上游更省事
- 功能固定,只服务一个客户。
- 只是想把代码分模块、写整洁,没有分发诉求。
- 不打算维护插件运行时、包签名与迁移编排。
- 团队规模小,停机发版可以接受。
常见问题
先回答几个高频疑问
和 RuoYi-Vue-Plus 是什么关系?
底座能力来自 RuoYi-Vue-Plus 并完整保留;区别在业务模块的交付方式——从编译期耦合改成运行期安装的应用。
为什么平台里没有 *-api 契约模块?
契约随应用走。平台对 cn.wujies.<app>.* 的 Java 引用为 0,每个应用是自包含工程;这是刻意的边界,不是没做完。
安装、升级应用需要重启宿主吗?
不需要。每个应用有独立类加载器与 Spring 子上下文,装了就进路由清单与登录检查,卸了就出清单。
应用的前端页面是怎么加载的?
后台前端在运行期按后端清单 import() 应用的 ESM 产物,裸模块由 import map 指到宿主同一份实例,避免双 Vue。
可以商用吗?
项目以 MIT 协议发布,可商用;请在衍生项目中保留原作者的版权声明。
开始使用
写一个自己的应用
一条命令生成后端、迁移脚本与前端页面;打开开发模式后,重建 jar 就能热加载,不需要重新打包上传。