目标(必须达成)
你这一阶段要完成 5 件事:
- 创建 Maven 多模块工程
- 设计分层架构(符合 SpringBoot 企业规范)
- 初始化 Git Flow
- 定义统一返回体 + 异常体系
- 建立基础依赖(MySQL / Redis / MyBatis / Web)
一、项目结构设计(非常关键)
我们采用标准互联网公司结构:
minishop
│
├── minishop-common // 公共模块(工具类/返回体/异常)
├── minishop-user // 用户服务
├── minishop-product // 商品服务
├── minishop-order // 订单服务
├── minishop-payment // 支付服务
│
├── minishop-gateway // 后续扩展(API网关)
│
└── pom.xml(父工程)
每个模块职责(必须理解)
1. common(核心基础模块)
放所有“系统级能力”:
- 统一返回体
- 全局异常
- 工具类
- 常量
- 枚举
- DTO基础结构
👉 所有模块依赖它
-------------------------------------------------------------------------------------------------------------------------
2. user-service
- 登录
- 用户信息
- 地址管理
-------------------------------------------------------------------------------------------------------------------------
3. product-service
- 商品
- SKU
- 分类
- 库存查询
-------------------------------------------------------------------------------------------------------------------------
4. order-service
- 下单
- 订单状态流转
- 订单查询
-------------------------------------------------------------------------------------------------------------------------
5. payment-service
- 支付模拟
- 支付状态回调
- 超时关闭订单
-------------------------------------------------------------------------------------------------------------------------
二、创建 Maven 父工程Parent Project
⚠️ 父工程没有src
<!-- Parent Project 不打包,所以设为pom。 因为父工程不负责业务代码,也不会生成可执行 Jar,它的职责是统一管理模块、依赖版本和构建配置, 因此需要使用pom打包类型。Maven 会将它作为聚合工程(Aggregator)和父工程(Parent)使用,而不是一个可执行应用。 打包就是jar,Maven就会任务这是一个java程序,会去找src-->
1. 创建 pom.xml(核心)
配置文件声明依赖
- Maven →
pom.xml(Project Object Model) - pip →
requirements.txt/pyproject.toml - Maven 管理的是jar/war 等字节码包,编译后使用
- pip 管理的是Python 源码包或 wheel 包,解释执行
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--POM 模型版本。--> <!--等价于import minishop--> <groupId>com.minishop</groupId> <!--工程名字--> <artifactId>minishop</artifactId> <!--项目版本--> <version>1.0.0</version> <!-- Parent Project 不打包,所以设为pom。 因为父工程不负责业务代码,也不会生成可执行 Jar,它的职责是统一管理模块、依赖版本和构建配置, 因此需要使用 pom 打包类型。Maven 会将它作为聚合工程(Aggregator)和父工程(Parent)使用,而不是一个可执行应用。 打包就是jar,Maven就会任务这是一个java程序,会去找src--> <packaging>pom</packaging> <modules> <module>minishop-common</module> </modules> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
1.1、Parent、Aggregator、Module 到底是什么?
实际上,一个
pom.xml可能同时承担两种角色:① Parent(父工程)② Aggregator(聚合工程)③ Module(业务模块)
① Parent(父工程)——统一给子模块提供配置
如下:那么所有的子模块都将继承<java.version>17</java.version><spring.boot.version>3.5.0</spring.boot.version>,不需要每个模块都写一遍
<properties> <java.version>17</java.version> <spring.boot.version>3.5.0</spring.boot.version> </properties>② Aggregator(聚合工程)——告诉Maven,我的项目由哪些Module组成。
例如:以后执行mvn clean install ,Maven不只编译 minishop,还按顺序编译子模块
<modules> <module>minishop-common</module> <module>minishop-user</module> <module>minishop-order</module> </modules>③ Module(业务模块)——即上述子模块
业务模块中,一般才有src、controller、service、mapper
总结:
Parent——》管理配置
Aggregator——》管理模块
Module——》真正写业务
1.2 Spring Boot Parent
没有 Spring Boot Parent
你需要自己管理:
- Spring 版本
- Jackson 版本
- Logback 版本
- MyBatis 版本
- 兼容性
有 Spring Boot Parent
你只需要写:
spring-boot-starter-web其他全部自动匹配。
<!-- Spring Boot Parent --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.5</version> <relativePath/> </parent>