当前位置: 首页 > news >正文

从零到一:基于 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 项目。在整个过程当中,我们:

    1. 了解了多模块架构的优势,包括提高项目的可维护性、依赖管理清晰、便于测试和部署、以及集成开源功能模块等方面。
    1. 从零开始构建项目,通过创建父项目和多个子模块,利用 Maven 的父子模块关系实现了高效的模块化开发,简化了依赖管理和构建配置。
    1. 逐步实现了多模块项目的结构,学习了如何将子模块绑定到父模块,如何管理父项目的通用配置,并在子模块中实现了简单的功能,验证了多模块项目架构的有效性。
    1. 结合实际需求集成了开源模块,如 Spring Boot 基础、Web、测试模块等,这为我们的开发提供了稳定且高效的基础框架。

通过这篇教程,你应该能够掌握如何使用 Maven 构建多模块 Spring Boot 项目,并能将其应用到实际的开发中。这种架构不仅能够帮助团队在大型项目中实现高效的协作,还能够确保项目的可扩展性和可维护性。随着项目需求的增长,你可以进一步优化和扩展该架构,集成更多的功能模块,满足不同的业务需求。

http://www.jsqmd.com/news/1362079/

相关文章:

  • 5分钟搭建你的第一个极简看板:Nullboard本地项目管理终极指南
  • AI代理安全运营:使用Agent Governance Toolkit建立安全运营中心
  • 2026年河北市政设施厂家推荐指南:市政给排水、井盖护栏、配重构件、成品排水设施公司优选 - 海棠依旧大
  • 远程控制技术演进与UU远程核心架构解析
  • FGO-py:解放双手的终极FGO自动化助手指南
  • 战略成交10. 怎么找到你的企业天赋?看这三个指标就够了
  • 2026年河北市政设施厂家推荐:井盖、排水沟、配重块、穿线井、护栏底座、系船柱设备选型指南 - 海棠依旧大
  • GitHub绿墙现象解析:代码提交背后的真实价值
  • 明日方舟工具箱:高效实用的全服支持游戏助手
  • 光热电站储热容量配置的经济性优化方法
  • 激光雕刻新手指南:5个技巧快速掌握LaserWeb4开源控制软件
  • Angular-Async-Local-Storage完全指南:如何用Observables构建高性能客户端存储
  • 如何通过CS-Notes构建你的计算机科学知识体系:AI时代的学习加速器
  • RedisInsight完整指南:免费可视化工具让Redis管理变得简单快速
  • MouseFlight:打造War Thunder风格的终极飞机鼠标操控系统
  • csTimer vs 其他魔方计时器:为什么专业选手都选择它?
  • 终极指南:如何用WPGraphQL for WooCommerce构建现代化电商API
  • cli-color高级技巧:自定义主题、嵌套样式与跨平台兼容方案
  • Pickerview常见问题解答:开发者必看的10个技巧
  • Linux平台终极网易云音乐播放器:NeteaseCloudMusicGtk4完整使用指南
  • PRIL实验复现:图像分类算法性能对比与实践
  • GPS坐标转换终极指南:5分钟掌握卫星定位核心算法
  • 2026太原高新申报选择之道:从通过率看机构实力,附深度避坑指南 - 优质品牌中立测评推荐
  • TCP/IP分层架构与核心协议解析
  • Unity与Photoshop图片透明度差异:颜色空间原理与解决方案
  • 拼多多商品详情API调用指南与优化实践
  • 数据科研提示词设计:CRISP原则与实战技巧
  • Linux命令实战:从基础到进阶的必备技能
  • 基于python的糖尿病预测2(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Linux磁盘挂载与文件系统管理实战指南