springboot多模块拆分与打jar包、war包

springboot多模块拆分项目创建的工具:

  • idea

springboot多模块拆分项目说明:

  • 常见问题
  • 打包
  • 创建模块
  • 循环依赖

springboot多模块拆分项目创建模块

我们将项目分为以下模块:

  • caip-annotation
  • caip-common
  • caip-service
  • caip-domain
  • caip-web(核心启动类)

接下来开始创建新项目,如下图:

springboot多模块拆分与打jar包、war包_第1张图片

选择Spring Initializr初始化spring相关项目组件。因为本身我们要创建springboot项目,所以选择用idea这个自带的功能创建是相当方便快捷的,简直不要太爽!!!

springboot多模块拆分与打jar包、war包_第2张图片

创建好父项目,该项目为空的pom项目,主要是用来作为所有子模块的jar引用、root节点打包。

springboot多模块拆分与打jar包、war包_第3张图片

这里我们是普通web项目,那么就勾选上Web项目,springboot的版本自行斟酌,到这里,我相信你能感觉到idea的方便之处!

springboot多模块拆分与打jar包、war包_第4张图片

点击下一步就完成即可。

springboot多模块拆分与打jar包、war包_第5张图片

父(根)项目创建完成结构如下图:

springboot多模块拆分与打jar包、war包_第6张图片

还有一个需要注意的地方是,父项目不需要配置maven打包,不然打包会打包出一份多余的jar包:

springboot多模块拆分与打jar包、war包_第7张图片

拆分子模块并创建

PS:在创建子模块时,你脑海中一定要规划清楚,否则出现循环依赖,就不好办了。比如common依赖了service,service又依赖了common,但是你得核心启动模块又依赖了这两个子模块,就会出现循环依赖的问题。所以规划的时候要思路清晰。

首先创建caip-annotation子模块如下图:

springboot多模块拆分与打jar包、war包_第8张图片

后面的和parent项目相同的流程,创建完成后如下图:

springboot多模块拆分与打jar包、war包_第9张图片

然后子模块:service、domain、common都是相同的创建方式、配置和目录结构,只是项目名称和artifactd不同,按照上图的配置和说明,更改配置。子模块除了核心启动类(caip-web),其他的启动类全都要删除,只保留一个核心启动类来启动项目。其中多余的依赖包和properties在parent已经具备,如下图:

springboot多模块拆分与打jar包、war包_第10张图片

所以子模块中的、springbootstarterweb、test都不需要。

子模块核心启动类的创建和前面的子模块项目创建流程一样,结构目录如下:

springboot多模块拆分与打jar包、war包_第11张图片

下面是核心启动类的pom配置:

springboot多模块拆分与打jar包、war包_第12张图片

如果你想以jar包执行项目请参考下图:

springboot多模块拆分与打jar包、war包_第13张图片

常见问题:

  • 循环依赖。这个问题由于你拆分的子模块相互依赖,并且核心启动也依赖,会导致该问题。怎么解决?拆分可以独立的模块,比如之前我的annotation子模块的注解放在common中,依赖了service、domain、那么service和又依赖了common,就形成了循环依赖。所以我直接拆分出annotation作为子模块。
  • 打包。如果需要以java命令jar包的方式依赖springboot内置Tomcat启动项目,那么必须配置启动的main的class;如果打war包,依赖外置Tomcat启动项目,那么不需要配置main的class入口,然后parent项目pom配置排除springboot内置Tomcat。
  • 启动报错找不到bean,或无法装载bean。因为项目的拆分,所以springboot无法自动扫描到controller、service、自定义注解等等,那么需要在启动类上的SpringBootApplication注解手动配置scanBasePackages扫描相应的子模块的包。

就到这里结束了,这里附上源码链接: https://pan.baidu.com/s/1TiSLICUZC8dqX5c0HyfISw 提取码: 222n。

你可能感兴趣的:(Java)