framework-build - 构建配置模块
1. 模块概述
framework-build 是 epoch-framework 中的构建配置模块,用于统一管理项目的依赖版本和构建插件配置。该模块采用 Maven 的父 POM 模式,通过继承的方式,确保项目各模块之间的依赖一致性和构建稳定性,减少依赖冲突和构建错误。
2. 模块结构
framework-build/
├── pom.xml # 主 POM 文件,包含所有依赖版本和构建插件配置
└── README.md # 模块说明文档
3. 核心功能
3.1 统一依赖版本管理
通过 Maven 的 <dependencyManagement> 标签统一管理项目所有依赖的版本,确保各模块使用的依赖版本一致,避免版本冲突。
主要功能:
- Spring Boot 相关依赖版本管理
- Spring Cloud 相关依赖版本管理
- Spring Cloud Alibaba 相关依赖版本管理
- 数据库相关依赖版本管理
- 缓存相关依赖版本管理
- 消息队列相关依赖版本管理
- 安全相关依赖版本管理
- 文档相关依赖版本管理
- 构建工具相关依赖版本管理
使用示例:
<!-- 在子模块中引入依赖时,无需指定版本 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2 统一构建插件配置
通过 Maven 的 <pluginManagement> 标签统一管理项目所有构建插件的配置,确保各模块使用的构建插件版本和配置一致,提高构建过程的稳定性。
主要构建插件:
- Maven Compiler Plugin:Java 编译插件
- Maven Surefire Plugin:单元测试插件
- Maven Failsafe Plugin:集成测试插件
- Maven Jar Plugin:JAR 打包插件
- Maven War Plugin:WAR 打包插件
- Maven Source Plugin:源码打包插件
- Maven Javadoc Plugin:Javadoc 生成插件
- Maven Release Plugin:版本发布插件
- Spring Boot Maven Plugin:Spring Boot 打包插件
使用示例:
<!-- 在子模块中使用构建插件时,无需指定版本和详细配置 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.3 依赖冲突解决
通过统一依赖版本管理和依赖排除机制,解决项目中可能出现的依赖冲突问题。
依赖冲突检测:
# 使用 Maven 命令检测依赖冲突
mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]
依赖排除示例:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除不需要的依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3.4 构建环境统一
通过统一的构建配置,确保在不同环境下的构建结果一致,提高构建过程的可重复性和可靠性。
构建环境要求:
- JDK 17+
- Maven 3.6+
- Git 2.0+
4. 设计理念
4.1 集中管理
将所有依赖版本和构建插件配置集中管理,便于统一维护和升级。
4.2 约定大于配置
通过合理的默认配置和命名约定,减少开发者的配置工作量。
4.3 可扩展性
提供扩展点和配置选项,支持自定义配置和功能扩展。
4.4 版本兼容性
确保各依赖版本之间的兼容性,避免版本冲突和构建错误。
5. 使用指南
5.1 继承父 POM
在子模块的 pom.xml 中继承 framework-build 的 POM:
<parent>
<groupId>com.epoch</groupId>
<artifactId>framework-build</artifactId>
<version>${epoch.version}</version>
</parent>
5.2 引入依赖
在子模块中引入所需的依赖,无需指定版本:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
5.3 使用构建插件
在子模块中使用所需的构建插件,无需指定版本和详细配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
5.4 执行构建命令
使用 Maven 命令执行构建:
# 编译项目
mvn compile
# 运行单元测试
mvn test
# 打包项目
mvn package
# 安装项目到本地仓库
mvn install
# 发布项目到远程仓库
mvn deploy
6. 版本变更
6.1 主要变更
-
3.4.0:
- 更新 Spring Boot 到 3.4.1
- 更新 Spring Cloud 到 2024.0.0
- 更新 Spring Cloud Alibaba 到 2023.0.3.2
- 新增 MyBatis 3.5.17 支持
- 新增 Redis 3.50.0 支持
- 新增 RocketMQ 2.3.1 支持
-
3.3.0:
- 更新 Spring Boot 到 3.3.0
- 更新 Spring Cloud 到 2023.0.0
- 更新 Spring Cloud Alibaba 到 2023.0.2.0
- 优化依赖版本管理,减少版本冲突
-
3.2.0:
- 初始版本,基于 Spring Boot 3.2.0 构建
- 提供统一依赖版本管理和构建插件配置
7. 常见问题
7.1 如何自定义依赖版本?
可以在子模块的 pom.xml 中直接指定依赖版本,覆盖父 POM 中的版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.4.1</version> <!-- 覆盖父 POM 中的版本 -->
</dependency>
7.2 如何解决依赖冲突?
可以使用 Maven 的 dependency:tree 命令查看依赖树,找出冲突的依赖,然后通过排除或指定版本的方式解决:
# 查看所有依赖
mvn dependency:tree
# 查看特定依赖的冲突情况
mvn dependency:tree -Dverbose -Dincludes=org.slf4j:slf4j-api
7.3 如何自定义构建插件配置?
可以在子模块的 pom.xml 中自定义构建插件配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source> <!-- 覆盖父 POM 中的配置 -->
<target>17</target> <!-- 覆盖父 POM 中的配置 -->
</configuration>
</plugin>
</plugins>
</build>
7.4 如何升级框架版本?
只需要在父 POM 中更新 framework-build 的版本即可:
<parent>
<groupId>com.epoch</groupId>
<artifactId>framework-build</artifactId>
<version>3.4.0</version> <!-- 更新到最新版本 -->
</parent>
8. 版本兼容性矩阵
| framework-build 版本 | Spring Boot 版本 | Spring Cloud 版本 | Spring Cloud Alibaba 版本 |
|---|---|---|---|
| 3.4.0 | 3.4.1 | 2024.0.0 | 2023.0.3.2 |
| 3.3.0 | 3.3.0 | 2023.0.0 | 2023.0.2.0 |
| 3.2.0 | 3.2.0 | 2022.0.0 | 2022.0.0.0-RC2 |
| 3.1.0 | 3.1.0 | 2022.0.0 | 2022.0.0.0-RC1 |
| 3.0.0 | 3.0.0 | 2022.0.0 | 2022.0.0.0-RC1 |