一、项目分模块设计
1. 核心定义
将大型项目按功能或技术分层,拆分为多个独立子模块。
2. 设计目的
1.便于项目管理、维护与功能扩展
2.模块间资源共享,代码复用
3.降低代码耦合,提升团队并行开发效率
3. 三种拆分策略
| 拆分策略 | 说明 | 示例 |
|---|---|---|
| 按功能模块拆分 | 按业务领域划分,一个模块对应一条业务线 | mall-goods、mall-cart、mall-order |
| 按技术分层拆分 | 按架构分层划分,全业务共用一套分层 | mall-pojo、mall-service、mall-mapper |
| 功能+分层组合拆分 | 前两种结合,业务线内部再做技术分层 | mall-goods-service、mall-order-controller |
4. 开发规范
1.先完成模块规划,再编码,禁止后期强行拆分
2.模块依赖保持单向,杜绝循环依赖
3.通用工具类、常量、异常统一放入 common 公共模块
二、Maven 继承关系
1. 核心概念
父工程与子工程的继承体系,子工程可复用父工程所有配置,主要用于统一管理依赖。
核心作用
- 简化依赖配置,避免重复编写
- 统一版本,解决版本冲突
- 集中管控依赖,升级仅需修改父工程
2. Maven 打包方式
| 打包方式 | 适用场景 |
|---|---|
| jar | 普通业务模块、SpringBoot 项目(内嵌Tomcat可独立运行) |
| war | 传统Web项目,需部署至外部Tomcat |
| pom | 父工程/聚合工程,仅管理配置,不编写业务代码 |
3. 继承实现步骤 & 配置示例
1.父工程:打包方式设为 pom,可继承 SpringBoot 官方父工程
2.子工程:通过 <parent> 标签指定父工程,自动继承配置
父工程 pom.xml
xml
<!-- 继承SpringBoot官方父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.10</version>
<relativePath/>
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
子工程 pom.xml
xml
<parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
4. 关键规则
1.relativePath:指定父工程 pom 相对路径,不配置则从仓库查找
2.版本优先级:子工程依赖版本 > 父工程版本
3.继承范围:依赖、插件、属性等配置全部自动继承
三、Maven 版本锁定
1. 核心概念
通过 <dependencyManagement> 在父工程统一锁定依赖版本,是多模块项目标准用法。
核心作用
- 全局管控版本,彻底解决版本冲突
- 子工程引入依赖无需指定版本
- 版本升级只改父工程一处,维护简单
2. 标签区别
| 标签 | 作用 | 继承规则 |
|---|---|---|
| 直接声明依赖 | 子工程自动继承所有依赖 | |
| 仅锁定依赖版本 | 不自动引入依赖,子工程按需引入、免写版本 |
3. 版本属性统一管理
借助 <properties> 定义版本常量,集中维护版本号。
父工程配置
xml
<properties>
<lombok.version>1.18.30</lombok.version>
<jjwt.version>0.9.1</jjwt.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程配置(无需指定版本)
xml
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
4. 最佳实践
1.父工程用 dependencyManagement 锁定所有公共依赖版本
2.所有版本号统一抽离到 properties 标签
3.SpringBoot、MyBatis 等框架优先使用官方父工程版本
4.子工程可自行指定版本,优先级高于父工程
四、Maven 聚合关系
1. 核心概念
聚合工程用于整合所有子模块,实现一键全项目构建。
- 聚合工程:打包方式为 pom,无业务代码,仅管理模块
- 作用:自动按依赖顺序构建所有子模块,无需逐个手动执行
配置示例(聚合工程 pom.xml)
xml
<modules>
<module>../tlias-pojo</module>
<module>../tlias-utils</module>
<module>../tlias-web-management</module>
</modules>
规则:构建顺序由模块依赖关系决定,与 <module> 书写顺序无关。
2. 继承与聚合 联系 & 区别
联系
1.两类工程打包方式均为 pom
2.实际开发中通常合并为同一个父工程,同时实现继承+聚合
区别
| 维度 | 继承关系 | 聚合关系 |
|---|---|---|
| 核心目的 | 统一管理依赖、版本、插件 | 多模块一键整体构建 |
| 配置位置 | 子工程 pom.xml 配置 <parent> |
父/聚合工程 pom.xml 配置 <modules> |
| 作用范围 | 单个子工程 | 整个项目所有模块 |
五、Maven 私服
1. 核心概念
私服是企业局域网内的远程仓库,用于代理中央仓库、实现团队内部资源共享。
依赖查找顺序:本地仓库 → 私服 → 中央仓库
2. 仓库分类
| 仓库类型 | 版本标识 | 说明 |
|---|---|---|
| release 仓库 | RELEASE | 正式发行版,版本稳定 |
| snapshot 仓库 | SNAPSHOT | 开发快照版,版本不稳定 |
| central 仓库 | - | 代理外网中央仓库的第三方依赖 |
3. 核心配置
(1)配置私服账号(settings.xml)
xml
<servers>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
(2)配置项目上传地址(项目 pom.xml)
xml
<distributionManagement>
<repository>
<id>maven-releases</id>
<url>http://192.168.150.101:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://192.168.150.101:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
(3)配置私服镜像(settings.xml)
xml
<mirrors>
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>
</mirrors>
4. 核心操作
1.上传资源:执行 mvn deploy,自动根据版本类型上传至对应仓库
2.下载依赖:项目引入依赖时,优先从私服拉取资源