SpringBoot 多模块项目构建(父/子模块)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

1. 多模块项目

使用 SpringBoot 开发 Web 项目,如果项目整体不太复杂,无需使用微服务架构,为了开发的便利性可以采用 Maven 的多模块项目结构。

SpringBoot 的多模块项目就是基于 Maven 管理、对项目按照功能或者层级结构进行拆分,降低项目耦合性,抽取公共模块,实现一处开发多处引用,提高代码复用率和开发效率,更利于项目后期的维护和升级。

2. 项目结构初始化

2.1 创建父工程

创建多模块项目时首先要创建最上层父工程,并用来统一管理子模块,创建方法流程为:

  1. 使用 IDEA 编译器,选择文件 -> New -> 新建项目,选择 Spring Initializr,点击下一步,
  2. 设置合适的 Group 名称和 Artifact 名称(两者最终代表包路径),选择合适的 Java 版本并点击下一步,
  3. 选择合适的起步依赖,也可以不选择后续使用 maven 坐标手动添加,点击下一步,
  4. 为项目设置合适的名称,并选择项目在本地生成的根目录,点击完成
  5. 初始化生成 SpringBoot 项目

得到父工程项目后,由于父工程只用来统一管理多模块,并不会进行代码编写,因此会将父工程目录结构中无用的文件和文件夹删除

  • 删除 .mvn 和 src 文件夹
  • 删除 mvnw 和 mvnw.cmd 文件
  • 留下 pom.xml 作为父级依赖设置,进行统一依赖管理

2.2 创建子模块

父工程创建成功后,可以在此基础上新建子模块,在父项目上点击鼠标右键,选择新建 -> 模块 -> 新建模块,选择 Spring Initializr,之后便和创建 SpringBoot 项目一致,定义组织名称、选择起步依赖、定义项目名称,最后完成创建得到一个子模块项目。

在创建子模块项目时有几点需要注意:

  • 子模块创建时 Group 、 Artifact 和 Name 不要与父工程重复,否则关联时会出现冲突
  • 子模块的模块名会在目录结构中展示,并使用模块名进行父子关联
  • 自定义子模块名称时,对应的的内容根目录模块文件位置要跟随变化,如果设置成了父工程目录,则会覆盖父工程文件导致结构错误!

完成子模块的创建后,在项目中就会出现如下的目录结构

image.png

2.3 关联父子模块

到目前为止,整个项目结构上满足了父工程、子模块,要想真正实现父子模块关联还需要进一步设置。

父工程配置

  • 父工程的 pom.xml 中,设置 pom,代表打包类型为 pom
  • 父工程的 pom.xml 中,使用 标签定义子模块进行关联
    <modules>
        <module>child_module_name</module>
    </modules>
    复制代码
  • 注意:父工程的 pom.xml 中的 标签中引用了的 springboot ,这是 SpringBoot 项目默认需要引用的顶级工程,不可以删除,如果删除会导致项目运行失败!

子模块配置

  • 子模块的 pom.xml 中, 标签内容修改为父工程的 groupId、artifacId 等信息
  • 子模块的 pom.xml 中,使用 jar 设置打包为 jar 格式(可不加,在创建模块时会有选择默认打包类型)

3. 项目依赖的统一管理

3.1 默认引入依赖

起步依赖

在创建项目模块时,如果不选择任何初始依赖,那么 SpringBoot 项目只会默认加入 spring-boot-starter 和 spring-boot-starter-test 两个依赖信息

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
</dependencies>
复制代码

引入依赖

对于 Web 项目,还需要增加 web 依赖信息,可以在父工程的 pom.xml 文件中的 标签中添加如下依赖信息

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码

添加完成后,则所有子模块都会继承该依赖信息自动生效,无需额外引入。

3.2 统一管理依赖

既然是父-子工程的结构,可以将项目中用到的依赖统一在父工程项目中进行管理,统一依赖和版本号信息。

  1. om.xml 文件中,可以使用 标签自定义相关依赖的版本号
<properties>
    <java.version>1.8</java.version>
    <lombok.version>1.18.0</lombok.version>
    <mysql.version>8.0.23</mysql.version>
</properties>
复制代码

2 然后可以使用 标签统一声明用到的依赖信息,其中的版本号使用 标签定义变量

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency><dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <type>pom</type>
            <version>${mysql.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
复制代码
  1. 每个子模块需要使用依赖是只需要在 标签中加入依赖 groupId 和 artifactId 信息即可,版本号会自动使用父工程声明的版本
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>
复制代码

配置完成之后,如果有升级依赖 jar 版本的需求,则只需要在父工程中更新对应依赖的版本信息即可。

4. 项目运行

多模块的 SpringBoot 项目构建完成并配置完成后,且引入了 web 项目必须的依赖,就可以验证项目是否可以正常运行。

  • 验证运行:由于父工程没有代码启动类,因此只需要进入到子模块中,找到对应的启动类运行,如果运行成功,说明子模块运行依赖等配置成功;

image.png

  • 验证打包:打包流程使用 maven 工具管理,只需要在 IDEA 右侧打开 maven 工具栏,在父工程下的 Lifecycle 声明周期中,执行 clean、package、install 等阶段,控制台输出执行成功日志说明打包完成。

image.png

如果需要新增子模块,则按照相同的方式初始化模块,关联父工程,并在父工程中增加 标签对应即可。

猜你喜欢

转载自juejin.im/post/7102790032767287303