SpringBoot教程(二十九) | SpringBoot多模块构建及打包

一、多模块的由来

随着软件项目的不断发展,代码量不断增加,项目结构也变得越来越复杂。为了应对这种复杂性,通过多模块开发,可以降低耦合度、提高开发效率、便于管理和部署,并提高代码复用性。

二、多模块的划分方式

在Spring Boot项目中,多模块的划分可以根据不同的需求进行,常见的划分方式包括:

  • 按业务模块划分:将一个大型系统按照不同的业务模块进行划分,每个模块可以独立开发、测试、部署和维护。
  • 按功能模块划分:将一个系统按照不同的功能模块进行划分,每个模块负责完成一个特定的功能。
  • 按技术组件划分:将一个系统按照不同的技术组件进行划分,每个模块可以包含一个或多个技术组件,如数据库连接、消息队列、缓存框架等。
  • 按层次划分:将一个系统按照不同的层次进行划分,每个模块可以包含一个或多个层次,如数据访问层、服务层、控制层等。
  • 混合划分:将上述的任意两种或多种方式结合起来使用,以达到更好的代码复用、可维护性和可扩展性。

现阶段都是常用 混合划分的方式 来 多模块化

三、如何实现多模块划分

前言

本文通过构建一个包含4个子模块的项目,来演示 SpringBoot 在 Maven 环境的多模块构建过程

  • common 模块:包含各种通用的工具类、常量定义、异常类等
  • web 模块:负责处理 HTTP 请求,将请求转发给 Service 模块处理
  • service 模块:负责业务逻辑处理
  • dao 模块:负责与数据库进行交互,执行数据访问操作

依赖关系
web模块 依赖 service模块
service模块 依赖 dao模块
dao模块 依赖 common模块
common模块 不需要依赖 谁

1. 创建聚合父工程

1.首先通过 IDEA 工具,使用 Spring Initializr 来快速创建好一个Maven工程,先不用选依赖项。然后删除src文件。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.然后在 pom.xml 里面声明该父工程包含的子模块。(其它信息就不逐一讲述了,诸如继承SpringBoot官方父工程以及统一依赖管理 请查看下面的注释说明)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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>
    <groupId>com.example</groupId>
    <artifactId>springboot-module-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-module-demo</name>
    <description>Demo project for Spring Boot</description>

    <!-- 一般来说父级项目的packaging都需要改为pom,packaging默认类型jar类型-->
    <packaging>pom</packaging>

    <!-- 配置变量信息-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>

    <!-- 模块说明:这里声明多个子模块 -->
    <modules>
        <module>web</module>
        <module>service</module>
        <module>dao</module>
        <module>common</module>
    </modules>

    <!-- 不建议在父模块加具体依赖 -->

    <!-- 版本说明:这里统一管理依赖的版本号 -->
    <dependencyManagement>
        <dependencies>
            <!--Spring Boot的依赖项版本管理文档-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--子模块统一版本-->
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>web</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>dao</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

2. 创建子模块(module)

对着父工程右键 - New - Module - > 输入 web
如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以观察到例如web模块的xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!-- 继承本项目的父工程 -->
    <parent>
        <artifactId>springboot-module-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>web</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

其他的3个模块(service、dao、common)的创建也是以上操作
完成创建后,你可以通过IDEA 的 右侧的 maven工具栏目,可以看到项目的继承关系
在这里插入图片描述

3. 编写子模块代码

web 模块的操作

1.调整 web模块的pom.xml

为什么依赖我没有指定版本号,原因是因为父模块的pom.xml的 dependencyManagement 里面的 spring-boot-dependencies 已经帮我确定了版本(在我没有显式的指定版本号时)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!-- 继承父包 -->
    <parent>
        <artifactId>springboot-module-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>web</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <!-- Web模块相关依赖 -->
    <dependencies>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值