模块聚合
模块聚合主要用于快速构建项目
Maven 的 聚合是通过 <modules> 标签实现的。父 POM 可以包含多个模块,执行父 POM 的构建命令,会自动构建所有模块。
创建多模块聚合项目
<modules>中的值是子模块的相对路径。
假设存在:
project-root
├── module-a
├── module-b
└── module-c你可以在根目录创建一个 pom.xml:
xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>project-root</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>module-a</module>
<module>module-b</module>
<module>module-c</module>
</modules>
</project>如果子模块不在同一目录下:
xml
projects/
├─ parent-project/
│ └─ pom.xml <- 父 POM
├─ common-modules/
│ └─ module-a/
│ └─ pom.xml <- 子模块
└─ other-modules/
└─ module-b/
└─ pom.xml <- 子模块父 POM parent-project/pom.xml 中 <modules> 可以写:
xml
<modules>
<module>../common-modules/module-a</module>
<module>../other-modules/module-b</module>
</modules>警告
多模块项目中,如果模块之间存在依赖关系,还是需要将模块作为依赖引入。
例如service模块中需要使用dao模块的Student,则需要在service模块中引入dao模块:
xml
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>优势
如果是单模块项目,模块更新后,需要我们手动install到本地仓库,依赖他的项目才能够更新。
多模块聚合项目会帮助我们自动构建。
依赖版本控制
父 POM 常用于依赖版本的管理。可以在父 POM 使用<dependencyManagement>。
多模块项目一般遵循 父模块统一管理 + 子模块按需扩展 的原则。
- 父模块中会指定模块的默认版本,这并不会实际引入依赖。
xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
</dependency>
</dependencies>
</dependencyManagement>- 子模块的
pom.xml中引入依赖才是真正的引入。如果不指定版本将使用父模块中指定的默认版本,即1.18.42
xml
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>- 子模块也可以根据需要,自定义需要使用的依赖版本
xml
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>为什么要父项目去控制依赖的版本?
依赖之间经常会存在冲突,版本的指定是一个很头疼的事,将版本控制这个职责交给父模块,可以让子模块只专注于业务。父模块就像一个版本控制中心。spirngboot就是这个思想

