# springboot_maven聚合工程模板
**Repository Path**: boxsir/springboot_maven_demo
## Basic Information
- **Project Name**: springboot_maven聚合工程模板
- **Description**: springboot框架+maven聚合工程+mybatisplus的项目模板
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2022-10-21
- **Last Updated**: 2025-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SpringBoot, Maven, MybatisPlus, Swagger
## README
# Maven聚合工程
### 目录树
- [Maven聚合工程](#Maven_1)
- - [1.Maven聚合工程概念](#1Maven_2)
- [2.创建Maven聚合工程](#2Maven_6)
- - [2.1 创建Maven父工程](#21_Maven_7)
- [2.2 创建Module](#22_Module_14)
- [2.3 注意](#23__21)
- [3.Maven聚合工程依赖继承](#3Maven_30)
- - [3.1 依赖继承](#31__31)
- [3.2 依赖版本管理](#32__34)
- [4.个人操作案例](#4_39)
- - [4.1 创建Maven父工程zeromall](#41_Mavenzeromall_40)
- [4.2 创建Maven,SpringBoot子工程](#42_MavenSpringBoot_43)
- - [4.2.1 创建Maven子工程](#421_Maven_44)
- [4.2.2 创建SpringBoot子工程](#422_SpringBoot_63)
- - [注意点](#_69)
- [4.3 依赖继承图](#43__97)
- [总结图](#_102)
- [4.4 Maven聚合工程依赖分析](#44_Maven_105)
# [Maven](https://so.csdn.net/so/search?q=Maven&spm=1001.2101.3001.7020)聚合工程
## 1.Maven聚合工程概念
> Maven聚合工程:就是可以在一个Maven父工程中创建`多个组件(项目)`,多个组件之间可以相互依赖,实现组件的复用。

## 2.创建Maven聚合工程
### 2.1 创建Maven父工程
见项目maven-parent
> Maven聚合工程的父工程packing必须为pom
- 创建一个Maven工程
- 修改父工程的pom.xml,设置打包方式为pom

- 父工程用于管理子工程,不进行业务实现,因此src目录可以选择性删除
### 2.2 创建Module
- 选择父工程—右键—New—Module
- 输入子工程名称(g和v都从父工程继承)
- 子工程的pom文件

- 父工程的pom文件

### 2.3 注意
- 当创建好后,子工程里面的pom会显示自动继承parent,而父工程的pom会自动显示子工程组件;当删掉子工程后,需要`手动`到父工程里面删掉对应的子工程组件依赖。
- 当子工程`用户系统`需要引用`公共模块`,只需要在引入方的pom.xml文件中添加依赖即可。
**1.**

**2.**

**3.**

## 3.Maven聚合工程依赖继承
### 3.1 依赖继承
- 在父工程的pom.xml文件添加的依赖,会被子工程继承。

### 3.2 依赖版本管理
> 在父工程的pom.xml文件的dependencyManagement中添加依赖,表示定义子工程中此依赖的默认版本
> (此定义不会让子工程中添加当前依赖。子工程自己手动添加,版本就是前面默认的,可以自己修改版本)
> 
## 4.个人操作案例
### 4.1 创建Maven父工程zeromall
- 在pom.xml中加入`pom`,说明它就是一个父工程了。
- 删除src目录,因为代码全在子工程里,这个代码目录没用。
### 4.2 创建Maven,SpringBoot子工程
#### 4.2.1 创建Maven子工程
- 在父工程基础上创建四个子工程`common、beans、mapper、service`

> maven子工程继承maven父工程;
>
> - 会发现子工程的pom文件中会自动写明继承的父工程;
> - 而父工程pom文件中也会自动声明自己的子工程。
> 如图
> 子工程的pom文件:
> 
> 比如beans子工程,还需要在pom文件中加入`jar`,这样其他子模块就能用beans子模块。
> `前提`就是:其他子模块中要添加beans的依赖
> 
> 就比如mapper层要调用beans层,这时就能调用得到。
> 父工程的pom文件:
> 
> 各模块关系:只有一个root
> 
#### 4.2.2 创建SpringBoot子工程
最后的`controller`层,我就用`api`来命名。
**1.**

**2.**

##### 注意点
> 创建springboot子工程和maven子工程最大`区别`:前者会创建一个启动类,并且需要手动改配置
- 会发现,创建的boot子工程和maven父工程都是各自的主体root,并不存在继承关系

所以需要手动配置让两者存在关系
- 1 将boot工程api的pom文件中继承的springboot依赖组`剪切`到maven父工程的pom文件中去。
让maven父工程继承springboot依赖组(`boot的其他依赖和也要从boot项目pom中剪切到maven父工程pom中`)
```
org.springframework.boot
spring-boot-starter-parent
2.5.6
123456
```
- 2 让boot工程api的pom文件中继承maven父工程

`并且将将spring boot的依赖配置到父工程zeromall的pom.xml中`
springboot项目的pom文件应该只剩下面这些

- 3 在maven父工程的pom文件中`手动`添加子模块的声明

- 4 root主体

只有一个root主体,说明都继承拿一个root父工程!
### 4.3 依赖继承图

**依赖关系图:模块依赖可以传递**

依赖关系按照第二张图配置依赖关系。
### 总结图

### 4.4 Maven聚合工程依赖分析
> 如果将依赖添加到父工程的pom中,根据依赖的继承关系,所有的子工程中都会继承父工程的依赖
>
> - `好处`:当有多个子工程都需要相同的依赖时,无需在子工程中重复添加依赖
>
> - `缺点`:如果某些子工程不需要这个依赖,还是会被强行继承(即打包某一个子工程时,会进来很多无关的依赖)
>
> 如果在父工程中没有添加统一依赖,则每个子工程所需的依赖都要在对应的子工程的pom中手动添加。
>
> `(加入两个子模块,common和beans,都加了lombok依赖,此时一个1.18.18版本,一个1.18.16版本。其实两者并不影响。但是又有一个模块,它继承了上面两个模块,那它继承那一个版本呢?那它的lombok版本就可以在父工程的pom中定义依赖版本管理器,只是版本管理作用,具体依赖还要自己添加)`

`依赖配置说明`
> 1.在父工程的pom文件中一次性添加各个子工程所需的依赖
>
> 2.在各个子工程中单独添加当前子工程的依赖