从零到一:基于 IDEA 的 Spring Boot 多模块项目实战指南(Maven 架构)
从零到一:基于 IDEA 的 Spring Boot 多模块项目实战指南(Maven 架构)
文章目录
- 从零到一:基于 IDEA 的 Spring Boot 多模块项目实战指南(Maven 架构)
- 前言
- 一、多模块架构好处
- 1.1 提高项目可维护性
- 1.2 依赖管理更加清晰
- 1.3 更好的测试和部署
- 1.4 集成开源功能模块
- 二、项目介绍
- 三、构建多模块项目实战
- 3.1 新建(父)项目
- 3.1.1 流程图
- 3.1.2 修改父工程的pom.xml
- 3.2 新建子模块
- 3.2.1 流程图
- 3.2.2 修改子模块的pom.xml
- 3.2.3 修改父工程的pom.xml
- 3.3 在子模块新建一个APIhello接口测试
- 四、总结
前言
随着软件项目规模的不断扩展,单一模块的架构往往难以满足高效开发、维护和扩展的需求。尤其是在微服务架构日益普及的今天,项目的复杂度和团队合作的需求也变得更加多样化。为了更好地应对这些挑战,多模块架构成为了开发大型应用时的最佳实践之一。
一、多模块架构好处
1.1 提高项目可维护性
- 模块化:每个模块独立,彼此之间的耦合度较低,便于更新和维护。
- 代码清晰:每个模块有明确的责任,结构清晰,减少了代码的冗余和混乱。
1.2 依赖管理更加清晰
- 统一版本管理:通过父模块的 标签,可以集中管理所有子模块的依赖版本。
- 简化构建配置:父模块的构建配置可以统一传递给所有子模块,减少重复配置的工作量。
1.3 更好的测试和部署
- 独立测试:每个模块都可以有独立的测试用例,容易定位问题并快速修复。
- 增量部署:如果某个模块发生变化,通常只需要重新部署该模块,而不是整个项目。
1.4 集成开源功能模块
- 集成的开源功能模块,开源模块通常已经经过充分测试和优化,能够提供稳定且高效的功能支持,帮助开发人员避免重复造轮子,专注于项目的核心业务逻辑。
二、项目介绍
- 我最近在学习Spring AI后端开发框架、这个框架的依赖很容易冲突、我看的视频教程也是把功能分模块的去编写、然后我就把多模块创建的过程笔记写一下;
- 我的项目主要是通过父工程管理阿里的千问模型以及Spring AI的版本,然后子模块去引入具体的依赖;
- 备注:Spring AI 要求JDK 17以上、Spring Boot 3.0以上,如果大家没有引用这个框架可以选择其他的版本;
三、构建多模块项目实战
3.1 新建(父)项目
3.1.1 流程图
1、新建一个Spring Boot项目,使用 Maven 构建工具,Java 17,项目名称为 spring-ai-project;
2、选择Spring Boot的版本号(后面可以通过pom.xml进行修改)、点击Create
3、配置一下本地的Maven地址;
4、在创建 Spring Boot 项目后,默认会生成 src、.gitignore、HELP.md、pom.xml 等文件。此时,我们需要将 src 目录、.gitignore 文件和 HELP.md 文件删除,保留 pom.xml 文件,以便将当前项目作为父工程使用,专门用于管理依赖、插件和构建配置,从而实现统一的依赖管理和模块化构建。
3.1.2 修改父工程的pom.xml
1、删除之后、修改pom,xml、下面的pom.xml是一个Spring Boot的初始依赖管理、后续可以根据子模块的需要在dependencyManagement增加版本;
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- Maven 模型版本 用来说明 POM 文件遵循的规范版本 --><modelVersion>4.0.0</modelVersion><!-- 项目的组织唯一标识(一般是公司/组织的域名倒写)、在 Maven 仓库中,它会作为路径的一部分 --><groupId>org.example.exixiaozhou</groupId><!-- 项目的唯一标识(在 groupId 下的子项目名)、一般对应项目或模块的名称、在 groupId 下必须唯一 --><artifactId>spring-ai-project</artifactId><!-- 项目的版本号、SNAPSHOT 表示快照版本(开发中版本,可能会变动)、RELEASE 表示稳定发布版本 --><version>0.0.1-SNAPSHOT</version><!-- 统一管理依赖版本 pom → 表示这个模块本身不生成可运行的 jar/war,只作为 父模块 / 聚合模块 --><packaging>pom</packaging><!-- 项目通用属性配置、其他依赖可以使用这里定义的版本号 --><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.4.9</spring-boot.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><!-- 编译插件:指定 Java 版本、编码 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins><pluginManagement><plugins><!-- Spring Boot 插件:支持打包为可执行 jar --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><executions><execution><goals><goal>repackage</goal><!-- 将依赖打进 jar 包 --></goals></execution></executions></plugin></plugins></pluginManagement></build></project>3.2 新建子模块
3.2.1 流程图
1、在项目的根目录右键、新建模块;
2、给子模块命名、使用 Maven 构建工具,Java 17,点击next按钮、Spring Boot版本还是选择3.02,点击Create;
3、新建了子模块之后需要修改子模块的pom.xml
3.2.2 修改子模块的pom.xml
子模块加入标签、绑定父工程;
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><!-- 父项目的 groupId,要和父 pom.xml 中保持一致 --><groupId>org.example.exixiaozhou</groupId><!-- 父项目的 artifactId,要和父 pom.xml 中保持一致 --><artifactId>spring-ai-project</artifactId><!-- 父项目的版本号 --><version>0.0.1-SNAPSHOT</version><!-- 父 pom 的相对路径,默认就是 ../pom.xml(建议加上,避免 IDEA 或 CI 构建时找不到父 pom) --><relativePath>../pom.xml</relativePath></parent><!-- 子模块的 Maven 坐标,用于唯一标识当前模块 --><groupId>org.example.exixiaozhou.flight-booking</groupId><!-- 子模块的名称(对应父模块中的 <modules> 节点),最终打包出来的构件名 --><artifactId>flight-booking</artifactId><!-- 子模块的版本号,一般和父模块保持一致 --><version>0.0.1-SNAPSHOT</version><!-- 如果不填会默认使用父工程设置版本号 --><properties><java.version>17</java.version></properties><!-- 子模块具体需要引入的依赖 --><dependencies><!-- Boot 基础 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>3.2.3 修改父工程的pom.xml
父工程在加入子模块;
<!-- 声明子模块: --><modules><!-- 航空智能客服退票系统 --><module>flight-booking</module><!-- 还有其他子模块就继续加 --></modules>3.3 在子模块新建一个APIhello接口测试
1、新建了一个HelloController类、简单写了一个接口测试,新建了resource目录存放了一个简单的配置文件;
2、程序启动后用postman测试调用一下接口响应没问题;
四、总结
通过本篇指南,我们深入探讨了如何基于 IntelliJ IDEA 和 Maven 构建一个多模块的 Spring Boot 项目。在整个过程当中,我们:
- 了解了多模块架构的优势,包括提高项目的可维护性、依赖管理清晰、便于测试和部署、以及集成开源功能模块等方面。
- 从零开始构建项目,通过创建父项目和多个子模块,利用 Maven 的父子模块关系实现了高效的模块化开发,简化了依赖管理和构建配置。
- 逐步实现了多模块项目的结构,学习了如何将子模块绑定到父模块,如何管理父项目的通用配置,并在子模块中实现了简单的功能,验证了多模块项目架构的有效性。
- 结合实际需求集成了开源模块,如 Spring Boot 基础、Web、测试模块等,这为我们的开发提供了稳定且高效的基础框架。
通过这篇教程,你应该能够掌握如何使用 Maven 构建多模块 Spring Boot 项目,并能将其应用到实际的开发中。这种架构不仅能够帮助团队在大型项目中实现高效的协作,还能够确保项目的可扩展性和可维护性。随着项目需求的增长,你可以进一步优化和扩展该架构,集成更多的功能模块,满足不同的业务需求。
