项目结构
这篇解决什么
分清工作区里各仓的职责,以及后端 Maven 怎么拆:BOM、框架、业务模块、单体入口、网关。改接口时知道 Admin / App 的 Controller 和 VO 为什么分开。
先把工程跑起来,见 快速开始。默认端口 48080,管理端前缀 /admin-api。

示意图:管理后台走 /admin-api,用户端走 /app-api,都进 yudao-server。
工作区
RuoYi Office 按仓拆开,不是单一 Git 仓库。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 后端 | Spring Boot 多模块,单体入口 YudaoServerApplication | ruoyi-office/ |
| PC 管理端 | Vue3 + Vben + Ant Design Vue | ruoyi-office-vben/apps/web-antd/ |
| 移动端 | UniApp | ruoyi-office-uniapp/ |
| 大屏 | GoView | ruoyi-office-ui-go-view/ |
| 数据库脚本 | 全量 dump 与按日增量 | ruoyi-office-db/ |
Java 根包是 cn.iocoder.yudao,Maven groupId 是 cn.iocoder.cloud。这是源码路径,改业务时跟着目录走即可。
单体用 -P boot,微服务用 -P cloud(默认)。
后端四类模块
| 名称 | 说明 | 仓库路径 |
|---|---|---|
yudao-dependencies | BOM,统一依赖版本 | ruoyi-office/yudao-dependencies/ |
yudao-framework | Web、安全、MyBatis、缓存等 Starter | ruoyi-office/yudao-framework/ |
yudao-module-xxx | 业务模块,再拆 *-api 与 *-server | ruoyi-office/yudao-module-*/ |
yudao-server | 单体容器,引入需要的 *-server 后启动 | ruoyi-office/yudao-server/ |
yudao-gateway | 微服务网关 | ruoyi-office/yudao-gateway/ |
框架组件
每个 Starter 分 core 与 config。名字带 biz 的是业务向组件。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
yudao-common | 基础 POJO、枚举、工具 | yudao-framework/yudao-common/ |
yudao-common-server | 服务侧公共能力 | yudao-framework/yudao-common-server/ |
yudao-spring-boot-starter-env | 环境与配置 | yudao-framework/yudao-spring-boot-starter-env/ |
yudao-spring-boot-starter-web | Web、全局异常、访问日志;Admin 前缀 /admin-api | yudao-framework/yudao-spring-boot-starter-web/ |
yudao-spring-boot-starter-security | Spring Security 认证授权 | yudao-framework/yudao-spring-boot-starter-security/ |
yudao-spring-boot-starter-mybatis | MyBatis Plus | yudao-framework/yudao-spring-boot-starter-mybatis/ |
yudao-spring-boot-starter-redis | Redis + Redisson | yudao-framework/yudao-spring-boot-starter-redis/ |
yudao-spring-boot-starter-websocket | WebSocket | yudao-framework/yudao-spring-boot-starter-websocket/ |
yudao-spring-boot-starter-mq | 消息队列 | yudao-framework/yudao-spring-boot-starter-mq/ |
yudao-spring-boot-starter-rpc | Feign 调用 | yudao-framework/yudao-spring-boot-starter-rpc/ |
yudao-spring-boot-starter-job | 定时任务,接 XXL-Job | yudao-framework/yudao-spring-boot-starter-job/ |
yudao-spring-boot-starter-protection | 幂等、限流、分布式锁 | yudao-framework/yudao-spring-boot-starter-protection/ |
yudao-spring-boot-starter-excel | EasyExcel | yudao-framework/yudao-spring-boot-starter-excel/ |
yudao-spring-boot-starter-monitor | 监控与链路 | yudao-framework/yudao-spring-boot-starter-monitor/ |
yudao-spring-boot-starter-test | 单测 | yudao-framework/yudao-spring-boot-starter-test/ |
yudao-spring-boot-starter-biz-tenant | 多租户 | yudao-framework/yudao-spring-boot-starter-biz-tenant/ |
yudao-spring-boot-starter-biz-data-permission | 数据权限 | yudao-framework/yudao-spring-boot-starter-biz-data-permission/ |
yudao-spring-boot-starter-biz-ip | 地区与 IP 库 | yudao-framework/yudao-spring-boot-starter-biz-ip/ |
WebProperties 里 adminApi 默认 /admin-api,扫描 **.controller.admin.**。
业务模块
yudao-server/pom.xml 用依赖决定单体装哪些模块。
| 名称 | 说明 | 单体引入 | 仓库路径 |
|---|---|---|---|
yudao-module-system | 用户、角色、菜单、租户、字典 | 是 | ruoyi-office/yudao-module-system/ |
yudao-module-infra | 代码生成、文件、任务、配置 | 是 | ruoyi-office/yudao-module-infra/ |
yudao-module-mdm | 主数据 | 是 | ruoyi-office/yudao-module-mdm/ |
yudao-module-bpm | 流程引擎 | 是 | ruoyi-office/yudao-module-bpm/ |
yudao-module-oa | 协同办公 | 是 | ruoyi-office/yudao-module-oa/ |
yudao-module-hrm | 人力资源 | 是 | ruoyi-office/yudao-module-hrm/ |
yudao-module-contract | 合同 | 是 | ruoyi-office/yudao-module-contract/ |
yudao-module-project | 项目 | 是 | ruoyi-office/yudao-module-project/ |
yudao-module-asset | 资产 | 是 | ruoyi-office/yudao-module-asset/ |
yudao-module-weiwork | 企业微信 | 是 | ruoyi-office/yudao-module-weiwork/ |
yudao-module-crm | 客户关系 | 是 | ruoyi-office/yudao-module-crm/ |
yudao-module-erp | 进销存 | 是 | ruoyi-office/yudao-module-erp/ |
yudao-module-member | 会员 | 是 | ruoyi-office/yudao-module-member/ |
yudao-module-pay | 支付 | 是 | ruoyi-office/yudao-module-pay/ |
yudao-module-report | 报表 / 大屏 | 是 | ruoyi-office/yudao-module-report/ |
yudao-module-mp | 公众号 | 是 | ruoyi-office/yudao-module-mp/ |
yudao-module-mall | 商城(product / promotion / trade / statistics) | 是 | ruoyi-office/yudao-module-mall/ |
yudao-module-ai | 大模型 | 是 | ruoyi-office/yudao-module-ai/ |
yudao-module-iot | 物联网 | 是 | ruoyi-office/yudao-module-iot/ |
yudao-module-mes | 制造执行 | 是 | ruoyi-office/yudao-module-mes/ |
yudao-module-wms | 仓储 | 是 | ruoyi-office/yudao-module-wms/ |
yudao-module-im | 即时通讯 | 是 | ruoyi-office/yudao-module-im/ |
yudao-module-finance | 财务 / 票据 | 是 | ruoyi-office/yudao-module-finance/ |
分层与包
每个业务模块拆两个 Maven 子模块。

示意图:契约在 *-api,实现在 *-server。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
yudao-module-xxx-api | 给其它模块的接口、DTO、枚举 | yudao-module-xxx/yudao-module-xxx-api/ |
yudao-module-xxx-server | Controller、Service、DAL、ApiImpl | yudao-module-xxx/yudao-module-xxx-server/ |
三层 + 非严格分层:

示意图。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
controller.admin | 管理端 REST + VO | 例如 AuthController,@RequestMapping("/system/auth") |
controller.app | 用户端 REST,类名 App* | controller/app/ |
service | 接口 + *Impl | 例如 AdminUserService |
dal.dataobject | 映表 DO | 例如 AdminUserDO |
dal.mysql | Mapper | 例如 AdminUserMapper |
dal.redis | RedisDAO,按 Key 收口 | 例如 OAuth2AccessTokenRedisDAO |
api | 模块间 Api + DTO + Impl | AdminUserApi 在 system-api |
mq | Message / Producer / Consumer | 各模块 mq/ |
job | 定时任务 | 各模块 job/ |
enums | 枚举、ErrorCodeConstants | enums/ |
convert | MapStruct | 例如 AuthConvert |
对应 yudao-module-system 的包树:

示意图,按 yudao-module-system-server 真实目录。



为什么 Admin 和 App 拆开
同一功能的入参、出参、敏感字段不同。管理端查用户可以看更多字段,用户端不能把手机号等一并返回。
为什么不用 DO 当接口出入参
创建部门只该收 name、parentId。用 DO 会让 createTime、creator 也能被传入。Swagger 和校验也该挂在 VO 上,DO 只负责映表。代码生成器可以选「用 DO」,只适合很简单的页。
会员要发短信时,依赖 yudao-module-system-api,不要去碰对方 *-server 的内部类。
前端工程
PC 用 Vben 的 web-antd。api/ 与 views/ 按后端模块同构。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| PC 管理端 | 页面与 API | ruoyi-office-vben/apps/web-antd/src/views/、src/api/ |
| 移动端 | H5 / 小程序 / App | ruoyi-office-uniapp/ |
| 大屏 | GoView | ruoyi-office-ui-go-view/ |
配置与操作
开发对照本仓库目录拆模块,不要另造分层。改包、加模块先看 pom 和 yudao-server 依赖。没有「项目结构」菜单。
开启见 框架层。示意图见上文。
