Idea中SpringBoot多模块项目的建立实现
作者:少安 发布时间:2023-11-08 07:52:34
What
内含一个或多个maven模块的SpringBoot项目称为SpringBoot多模块项目
Why
便于维护 将一个大的单体项目分成多个子模块有利于模块间的维护, 删除或移动单个模块时对其他模块的影响也比较小 单个模块还可以复用
共享依赖 只需要在父类中定义公共的依赖项,子类模块都会共享父类的依赖项 在大型项目中会使得代码更容易简洁。
How
1.父模块
创建父项目(SpringBoot)
删除不需要的目录
去除src .mvn mvnw mvnw.cmd 文件
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
选择maven项目
输入具体信息
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
即可查看并搜索依赖项,这对于解决依赖冲突很有帮助
4.打包
方式1:聚合模块直接打包
在聚合模块打包,会自动计算依赖顺序,依次打包
依次执行 clean 与 install maven会自动计算构建顺序
方式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
猜你喜欢
- JDK 1.5开始提供ScheduledThreadPoolExecutor类,ScheduledThreadPoolExecutor类继承
- 背景产品想对多次快速点击做一下优化,想要的效果就是双击不会打开多次但是从开发角度来说,我可以用kotlin的拓展方法来调整这个,但是之前的历
- 在使用Gateway 调用一个文件上传服务时 前端传来的File的base64字符串怎么都接受不到 但是用Body方式请求就能接收到后来经过
- 一、前言(吐槽+煽情+简介) &n
- 文章来源:csdn 作者:chensheng913对于Java语言,最体贴的一项设计就是它并没有打算让人们为了写程序而写程序——人们也需要考
- 阅读提示 具有mybatis基础,熟练使用mybatis-plus。概述 我们都知道,mybatis-plus是一个mybatis的增强
- 样例代码在讲 Flutter 的盒子模型前,先看看HTML 中的盒子模型。如下图所示,一个页面元素包括了与父级容器的外边距(margin),
- 所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法。下面看
- java中Hashmap的get方法map中存储的是键值对,也就是说通过set方法进行参数和值的存储,之后通过get“键”的形式进行值的读取
- Navigator 的 push 和 pop方法Navigator 导航器的 push 和 pop 方法可以携带参数在页面间传递,其他变形的
- 好久没有做web了,JSON目前比较流行,闲得没事,所以动手试试将对象序列化为JSON字符(尽管DotNet Framework
- 最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑
- 实现要求1、使用Java图形界面组件设计软件,界面如图所示。2、软件能够满足基本的“加、减、乘、除"等运算要求。3、程序代码清晰,
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,
- C#串口模块的使用。使用VS .net框架下WinForm程序应用开发。C#开发的串口通信小工具。相比于QT添加的串口类,WinForm是通
- 什么是WebSocket?WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信—
- 在很多场景下,maven不能直接访问到外网时,使用代理是其中常见的一种方式。这篇文章整理一下常见的maven中设置代理的方法。代理服务器代理
- 本文实例为大家分享了java使用poi导出图片到Excel的具体代码,供大家参考,具体内容如下代码实现Controller/** * 导出志
- 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方