SpringBoot多模块项目

一、创建SpringBoot项目

码云地址

使用Idea创建一个SpringBoot项目,目前只添加了web和test依赖,创建完成结构如下图
gg

删除src和一些无用的东西
gg

二、创建子模块

右键上一步建的项目,选择New->Module
gg

选择Spring Initializr创建子SpringBoot项目
gg

创建三个子项目

1
2
3
data
service
web

创建完成后项目的结构图:
gg

  1. data用于数据访问层
  2. service为业务层,该模块依赖data模块
  3. web为前端提供api接口,该模块依赖service模块

各个模块的代码,详情码云

三、项目的打包

项目的打包,只需要在web模块,所以,不管是父项目还是data、service子模块中的pom.xml都不需要添加spring-boot-maven-plugin插件只需要在web模块添加

gg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<!--跳过测试运行-->
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

然后再Idea窗口的右边点击Maven Projects,选择父项目springboot-modele(带一个root的),展开Lifecycle,点击package,则开始进行项目的打包。

gg

打包完都提示全部成功,就可以在web模块下的target文件夹下有打包完成的jar包。

gg

可用下面命令运行该jar包

1
java -jar web-0.0.1-SNAPSHOT.jar

四、遇到的问题

service模块无法注入data模块的repo类(data模块用的是jpa),web模块无法注入service模块的service类

一开始怀疑是没扫描到该层的包,所以在web子模块的WebApplication类上增加注解@ComponentScan("com.xpp")不起作用,最后搜索到一篇文章。
解决方法:移动web模块的WebApplication类

一开始WebApplication类的位置如图:

gg

右键WebApplication类,选择Refactor->Move

gg

弹出:

gg

将com.xpp.web修改成com.xpp,修改后点击Refactor

gg

最终WebApplication类的位置:

gg