Idea中SpringBoot多模块项目的建立

3,935 阅读3分钟

What

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

Why

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

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

How

1.父模块

创建父项目(SpringBoot)

在这里插入图片描述

删除不需要的目录

去除src .mvn mvnw mvnw.cmd 文件

在这里插入图片描述

pom

  1. packaging标签 打包方式改为"pom", 表示这个模块是聚合模块 把子类模块都"聚合"起来 使用maven打包,可以从这个模块开始,会自动计算打包顺序
<packaging>pom</packaging>
  1. 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>
  1. modules标签 这个标签管理的是被聚合的模块 当新建子模块时,modules会自动添加单个的module标签

启动类

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

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

2.子模块

1.创建子模块

选择Module

在这里插入图片描述

选择maven项目

在这里插入图片描述
输入具体信息
在这里插入图片描述

2.pom

  1. packaging标签 这里可以选择jar或者war 指定打包方式
  2. parent 子类pom中的parent自动指向了父类的GAV 子类会自动引入父类pom中dependencies的中依赖项
<!--    父类:自动选择了父类-->
    <parent>
        <artifactId>my-app</artifactId>
        <groupId>com.ybj</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
  1. 模块间依赖 需要依赖某个模块,可以在pom中声明 这里的依赖是从本地仓库下载的,不是远程仓库

  2. 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插件进行冲突的排查