1. 多模块构建
- POM 是项目对象模型,该文件可以被继承
- <packaging> 可以指定打包方式,若无 <packaging> 默认打 jar
1.1 ClassPath
-
src/main/java与src/main/resources - 编译的 java 文件(.class)和 resource 资源下的文件都存放在 target/classes
- A.class.getClassLoader().getResource("").getPath();
- Thread.currentThread().getContextClassLoader().getResource("");
2. 聚合方式
- 每个子项目有自己的 POM 文件,子项目的 POM 会继承父项目的 POM
- 父工程包含子模块时使用 <modules>,可以通过<modules>编译多个模块
- 只要构建父项目就能够构建所有的子项目
父模块: <packaging>pom</packaging>
<groupId>com.boot.train</groupId>
<artifactId>boot-train</artifactId>
<name>boot-train</name>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
<relativePath/>
</parent>
<modules>
<module>boot-train-start</module>
<module>boot-train-base</module>
</modules>
子模块可以继承父 pom 文件 (IDEA: new > module...)
<parent>
<groupId>com.boot.train</groupId>
<artifactId>boot-train</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>boot-train-start</artifactId>
<name>boot-train-start</name>
若子模块又有子模块
<parent>
<groupId>com.boot.train</groupId>
<artifactId>boot-train</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>boot-train-base</artifactId>
<name>boot-train-base</name>
<!-- 若子模块又有子模块,则子模块也要改为 packaging:pom -->
<packaging>pom</packaging>
<modules>
<module>boot-train-basic</module>
</modules>
子孙模块
<parent>
<groupId>com.boot.train</groupId>
<artifactId>boot-train-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>boot-train-basic</artifactId>
<name>boot-train-basic</name>
2.1 聚合
<modules> 可以将 Maven 工程聚合到一起,进行统一操作,比如父工程打包时,其下聚合的工程都会被打包
2.2 依赖范围
- scope:provided 表示这个包不提供,其它项目引入的时候也看不到这个包
- optional:true 表示当前依赖不能向下传递成为间接依赖;可以节省开销,同时减少依赖冲突
- scope:provided 依赖不会传递给其它引用本模块的模块, optional=true就要看情况
3. relativePath 方式
- 适用于非同级模块
- 通过 <relativePath> 指定父模块 pom
- 无需 modules
子模块
<parent>
<groupId>com.boot.train</groupId>
<artifactId>boot-train</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 相对路径 -->
<relativePath>../boot-train/pom.xml</relativePath>
</parent>
<artifactId>boot-train-base</artifactId>
<packaging>pom</packaging>
子孙模块
<parent>
<groupId>com.boot.train</groupId>
<artifactId>boot-train-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../boot-train-base/pom.xml</relativePath>
</parent>
<artifactId>boot-train-basic</artifactId>
4. 版本管理
4.1 自定义标签<properties>
- 自定义标签:项目+version
父模块管理版本号
<properties>
<java.version>1.8</java.version>
</properties>
4.1 依赖管理
- 父工程添加的依赖,所有子模块会无条件继承,可使用 <dependencyManagement> 来管理依赖
- 若子模块指定依赖的版本号,则不会继承父工程的版本号
父模块 <dependencyManagement>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块 <dependencies>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>












网友评论