Spring Boot 3 多模块工程:从 30+ Maven 模块到 Open Core 双仓架构
久滴直播电商平台 · 技术博客系列 第 9 篇 标签Maven多模块Open Core工程架构前言当一个项目有 30 多个 Maven 子模块、同时需要维护开源版和商业版两个版本时工程架构的设计就变得至关重要。模块之间怎么组织版本号怎么统一管理两个版本怎么共享基础代码又各自独立构建久滴直播电商平台采用Open Core 双仓架构——Community 版MIT 开源和 Pro 版商业 EULA后端 30 Maven 模块通过三层结构和${revision}统一版本管理实现了一套基础、两个版本的灵活架构。本文将深入拆解这套方案。目录项目全景三层模块结构30 子模块的组织策略${revision} flatten-maven-plugin 统一版本管理Open Core 双仓架构yudao-dependencies BOM合规性实践LICENSE / NOTICE / 原作者保留1. 项目全景三层模块结构久滴后端的模块结构遵循经典的三层设计yudao根 POM ├── yudao-dependencies/ # 第一层依赖版本管理 BOM ├── yudao-framework/ # 第二层技术框架层 │ ├── yudao-common # 通用工具、枚举、异常 │ ├── yudao-spring-boot-starter-web │ ├── yudao-spring-boot-starter-mybatis │ ├── yudao-spring-boot-starter-redis │ ├── yudao-spring-boot-starter-security │ └── ... 15 个 starter ├── yudao-module-*/ # 第三层业务模块层 │ ├── yudao-module-system # 系统管理用户/角色/菜单/通知 │ ├── yudao-module-infra # 基础设施代码生成/文件/配置 │ ├── yudao-module-mall # 商城商品/订单/营销/支付 │ ├── yudao-module-live # 直播推拉流/IM/点播★ Pro │ ├── yudao-module-member # 会员等级/积分/签到 │ ├── yudao-module-circle # 圈子社区/热度排行★ Pro │ ├── yudao-module-museum # 博物馆 ★ Pro │ └── ... └── yudao-server/ # 启动入口聚合所有模块三层结构的职责dependencies只管版本号不包含任何代码framework只管技术能力不包含业务逻辑module只管业务实现按需引入 framework starter2. 30 子模块的组织策略api / biz 分离每个业务模块都拆分为api和biz两个子模块yudao-module-live/ ├── yudao-module-txlive-api/ # 接口层SPI 接口、DTO、枚举 └── yudao-module-txlive-biz/ # 实现层Service、Controller、DAO为什么要分离api模块可以被其他模块依赖如module-mall依赖module-live的 SPI 接口但不需要引入实现层的 Spring 依赖biz模块只在yudao-server中被引入避免模块间的循环依赖SPI 接口定义在api中实现在biz中完美配合条件装配模块间依赖管理模块间通过 API 接口进行通信而不是直接依赖 biz 模块// yudao-module-mall 的 pom.xmldependencygroupIdcn.iocoder.boot/groupIdartifactIdyudao-module-txlive-api/artifactIdversion${revision}/version/dependency这样module-mall可以调用module-live的LiveMarketingService接口但不会引入直播模块的全部依赖。3.${revision} flatten-maven-plugin 统一版本管理30 个模块如果各自维护版本号简直是一场灾难。久滴平台使用 Maven CI-Friendly Versions 方案根 POM 定义 revisionpropertiesrevision2026.06-pro-SNAPSHOT/revisionyudao.community.version2026.06-SNAPSHOT/yudao.community.version/propertiesgroupIdcn.iocoder.boot/groupIdartifactIdyudao/artifactIdversion${revision}/version子模块继承所有子模块都使用${revision}作为版本号!-- yudao-module-txlive-api/pom.xml --parentgroupIdcn.iocoder.boot/groupIdartifactIdyudao-module-live/artifactIdversion${revision}/version/parentflatten-maven-plugin${revision}在发布时需要被替换为实际版本号flatten-maven-plugin负责这个工作plugingroupIdorg.codehaus.mojo/groupIdartifactIdflatten-maven-plugin/artifactIdversion${flatten-maven-plugin.version}/versionconfigurationflattenModeresolveCiFriendliesOnly/flattenModeupdatePomFiletrue/updatePomFile/configurationexecutionsexecutionidflatten/idphaseprocess-resources/phasegoalsgoalflatten/goal/goals/executionexecutionidflatten.clean/idphaseclean/phasegoalsgoalclean/goal/goals/execution/executions/plugin执行mvn install时插件会自动生成.flattened-pom.xml将${revision}替换为2026.06-pro-SNAPSHOT。发版时只需改根 POM 一个地方# 从 SNAPSHOT 变为正式版mvn versions:set-property-Dpropertyrevision-DnewVersion2026.06-pro4. Open Core 双仓架构久滴平台采用Open Core模式——核心功能开源增值功能商业化┌──────────────────────────────────────────────┐ │ Community 版MIT │ │ │ │ yudao-framework │ │ yudao-module-system │ │ yudao-module-infra │ │ yudao-module-mall商品/订单/营销基础 │ │ yudao-module-member │ │ ... │ │ │ │ GitHub: jiudi-dev/live-mall-community │ └──────────────────────────────────────────────┘ ┌──────────────────────────────────────────────┐ │ Pro 版EULA │ │ │ │ 依赖 Community 版制品 │ │ │ │ yudao-module-live直播推拉流/IM/点播 ★ │ │ yudao-module-circle社区圈子/热度排行 ★ │ │ yudao-module-museum博物馆模块 ★ │ │ yudao-module-aiAI 增值功能 ★ │ │ pro-framework-extPro 框架扩展 ★ │ │ │ │ 云效 Packages / GitHub Private │ └──────────────────────────────────────────────┘Pro 仓的构建策略Pro 仓的pom.xml声明了双许可证licenseslicensenameMIT License (Community Edition)/nameurlhttps://opensource.org/licenses/MIT/urlcommentsCommunity Edition is released under the MIT License./comments/licenselicensenameLiveMall Pro Commercial EULA (Pro Edition)/nameurlhttps://kudi.net.cn/eula/urlcommentsPro Edition requires a signed EULA./comments/license/licensesPro 仓的revision使用-pro-后缀区分!-- Pro 仓版本2026.06-pro-SNAPSHOT --revision2026.06-pro-SNAPSHOT/revision!-- 依赖的 Community 版本 --yudao.community.version2026.06-SNAPSHOT/yudao.community.version5. yudao-dependencies BOMyudao-dependencies是一个 BOMBill of Materials模块集中管理所有第三方依赖的版本号dependencyManagementdependenciesdependencygroupIdcn.iocoder.boot/groupIdartifactIdyudao-dependencies/artifactIdversion${revision}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement子模块引入依赖时不需要指定版本号全部由 BOM 统一管理。好处是版本冲突一目了然升级某个依赖只需改 BOM 一个地方子模块的pom.xml更加简洁6. 合规性实践LICENSE / NOTICE / 原作者保留久滴平台基于芋道源码ruoyi-vue-pro二次开发遵循 MIT 协议的合规要求developers!-- 保留芋道源码原作者MIT 义务 --developeridYunaiV/idnameruoyi-vue-pro original author/nameurlhttps://github.com/YunaiV/urlrolesroleUpstream Author/role/roles/developer!-- LiveMall 团队 --developeridjiudi-team/idnameJiuDi Live-Mall Team/nameorganization久滴科技/organizationrolesroleMaintainer/role/roles/developer/developers项目还配置了许可证白名单管理includedLicensesincludedLicenseMIT License/includedLicenseincludedLicenseApache License, Version 2.0/includedLicenseincludedLicenseBSD 2-Clause License/includedLicense.../includedLicensesexcludedLicensesexcludedLicenseGNU Affero General Public License v3/excludedLicenseexcludedLicenseGNU General Public License v3.0/excludedLicenseexcludedLicenseServer Side Public License/excludedLicense.../excludedLicensesAGPL、GPL v3、SSPL 等具有传染性的开源协议被明确排除防止许可证风险。总结本文深入解析了久滴直播电商平台的工程架构设计三层模块结构dependencies版本管理→ framework技术框架→ module业务实现api/biz 分离接口层和实现层分离避免模块间循环依赖${revision}统一版本配合 flatten-maven-plugin改一处即全量生效Open Core 双仓Community 开源核心 Pro 商业增值共享基础代码合规性保障保留原作者信息、许可证白名单管理、MIT/EULA 双许可证声明下一篇我们将走进直播营销联动看看秒杀和优惠券如何推送到直播间弹幕流。久滴直播电商平台是一个基于 Spring Boot 3 Vue3 UniApp 的全栈开源直播电商解决方案。 GitHubhttps://github.com/jiudi-dev/live-mall-communityCommunity 版如果觉得本文对你有帮助欢迎 Star ⭐ 支持