Idea中SpringBoot多模块项目的建立实现

作者:少安 时间:2023-11-08 07:52:34 

What

内含一个或多个maven模块的SpringBoot项目称为SpringBoot多模块项目

Why

便于维护 将一个大的单体项目分成多个子模块有利于模块间的维护, 删除或移动单个模块时对其他模块的影响也比较小 单个模块还可以复用

共享依赖 只需要在父类中定义公共的依赖项,子类模块都会共享父类的依赖项 在大型项目中会使得代码更容易简洁。

How

1.父模块

创建父项目(SpringBoot)

Idea中SpringBoot多模块项目的建立实现

删除不需要的目录

去除src .mvn mvnw mvnw.cmd 文件

Idea中SpringBoot多模块项目的建立实现

pom

packaging标签 打包方式改为"pom", 表示这个模块是 聚合模块 把子类模块都"聚合"起来 使用maven打包,可以从这个模块开始,会自动计算打包顺序


<packaging>pom</packaging>

dependencies与dependencyManagement标签

1. dependencies将依赖放入标签中 子模块会自动引入父类的的依赖

2. dependencyManagement将依赖放入标签中 子模块 不会 自动引入父类的的依赖 还需要在子类中声明一次依赖 GAV中 不需要 声明version标签,version同父类中的一致

父类pom文件demo


<!--父类: springboot自带的启动类父类-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<!--创建时填写的基本信息-->
<groupId>com.ybj</groupId>
<artifactId>my-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>my-app</name>
<description>springboot多项目</description>
<!--父类的packing只能是pom-->
<packaging>pom</packaging>
<!-- 子类直接继承-->
<dependencies>
<!-- 子类需要在pom中 手动加入依赖(version不用写)-->
<dependencyManagement>

modules标签 这个标签管理的是被聚合的模块 当新建子模块时,modules会自动添加单个的module标签

启动类

父模块启动类,是整个模块的启动类 所有的请求都走父模块的端口 为了使子模块的服务也能启动,需要在父模块启动类上加入注解


@ComponentScan(basePackages = {"com.ybj.*",})

2.子模块

1.创建子模块

选择Module

Idea中SpringBoot多模块项目的建立实现

选择maven项目

Idea中SpringBoot多模块项目的建立实现

输入具体信息

Idea中SpringBoot多模块项目的建立实现

2.pom

packaging标签 这里可以选择jar或者war 指定打包方式

parent 子类pom中的parent自动指向了父类的GAV 子类会自动引入父类pom中 dependencies 的中依赖项


<!-- 父类:自动选择了父类-->
<parent>
 <artifactId>my-app</artifactId>
 <groupId>com.ybj</groupId>
 <version>0.0.1-SNAPSHOT</version>
</parent>

模块间依赖 需要依赖某个模块,可以在pom中声明 这里的依赖是从本地仓库下载的,不是远程仓库

Maven Helper插件 在idea中安装maven helper插件 点击pom文件,选择 Dependency Analyzer

Idea中SpringBoot多模块项目的建立实现

即可查看并搜索依赖项,这对于解决依赖冲突很有帮助

Idea中SpringBoot多模块项目的建立实现

4.打包

方式1:聚合模块直接打包

在聚合模块打包,会自动计算依赖顺序,依次打包

Idea中SpringBoot多模块项目的建立实现

依次执行 clean 与 install maven会自动计算构建顺序

Idea中SpringBoot多模块项目的建立实现

方式2:使用插件

方式1的问题就是耗费时间长, 因为是全部打包, 所以就需要实现单个模块打包 这里需要借助spring-boot-maven-plugin插件


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

5. 常见问题

依赖冲突

因为子类会继承父类的依赖项,所以可能 导致依赖冲突,从而使项目无法启动。 这里可以使用maven helper插件进行冲突的排查

来源:https://juejin.im/post/5ee641c56fb9a047d245e83a

标签:Idea,SpringBoot,多模块
0
投稿

猜你喜欢

  • java动态口令登录实现过程详解

    2022-01-01 10:16:28
  • 解决Map集合使用get方法返回null抛出空指针异常问题

    2023-11-25 00:14:00
  • 如何使用两个栈实现队列Java

    2023-11-29 17:48:09
  • springBoot Junit测试用例出现@Autowired不生效的解决

    2023-01-24 12:57:59
  • Android开发实现查询远程服务器的工具类QueryUtils完整实例

    2021-11-06 14:57:10
  • java门禁系统面向对象程序设计

    2023-08-25 02:25:53
  • 利用Kotlin开发你的第一个Android应用

    2022-04-23 14:39:53
  • Android编程实现点击EditText之外的控件隐藏软键盘功能

    2022-08-07 02:06:08
  • Struts2学习笔记(9)-Result配置全局结果集

    2022-04-09 11:33:10
  • 完美解决c# distinct不好用的问题

    2023-02-13 11:22:53
  • Eclipse添加xml文件提示及Hibernate配置学习

    2023-08-17 05:01:47
  • Java synchronized轻量级锁的核心原理详解

    2022-10-13 23:28:33
  • android ItemTouchHelper实现可拖拽和侧滑的列表的示例代码

    2023-08-14 14:51:51
  • c# 所有类型都从Object类型派生

    2022-08-13 21:22:58
  • JAVA面试题之Forward与Redirect的区别详解

    2023-11-25 02:27:15
  • SpringBoot实现单文件与多文件上传功能

    2023-03-22 23:44:11
  • jdbc与druid连接池的使用详解

    2023-09-18 17:50:11
  • Android仿iPhone日期时间选择器详解

    2023-09-11 04:23:37
  • C#与C++之间类型的对应知识点总结

    2023-09-07 21:02:56
  • Java编程实现基于用户的协同过滤推荐算法代码示例

    2022-09-06 12:44:24
  • asp之家 软件编程 m.aspxhome.com