【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配

注意,本内容仅涉及单端口(单SpringBoot Application)下的跨模块调用
而不是多端口(多SpringBoot Application)的(微服务)使用

项目创建:
IDEA newProject 选 Spring Initializer(或者单纯Maven项目然后删除多余的那些垃圾文件)
【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第1张图片
模块创建规范:

  1. 模块前缀需相同
    【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第2张图片
  2. 合理在POM内部使用EL表达式,从而把变量放在properties块中统一管理:
  • 声明:
    【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第3张图片
  • 调用:
    【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第4张图片

补充: 关于 maven POM 中 dependencymanagementdependencies 的区别

  • 自动向下继承式依赖:dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
  • 手动向下继承式依赖:dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;
    只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自 父pom;
    另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
    【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第5张图片

顶级POM的配置:
【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第6张图片

  • Modules 块:上图
  • Dependency Management 块:依赖子项目(上上图)

非顶级POM配置: 主(子)模块配置
【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第7张图片
一定不要忘记配置各模块 POM 中的 build 块 (不配置无法build成功,可能会导致缺模块的问题)


补充: 子模块运行时易发的问题

  • 子模块 Controller 404 的 DEBUG (主模块中也有 Controller 时)
    先确认子模块是否成功被打包在target文件夹中,若没,则确认每个子项目pom都配置了build块
    若还404,则???? 为啥Model1可以调Model2的Utils类,证明Model2正常build正常运行,但为何Model2的Controller无法被扫描到????
    • 因为module1 module2 的两个controller都在它们各自旗下的 com.jasper.controller包下又都叫BasicController,首先,包名冲突,以至于SpringBoot不去扫描第二个重名包,其次,如果把Model2的BasicController放在另一个包内,则会爆beanNameConfileException,bean重名。证明可以被扫描但名字重了。所以两个模块中若都包含controller,那么一定要注意对beanName的管理,和包名管理。
      所以一般不要把controller分在两个模块去存,controller属于web模块的东西就存在单独一个web模块里(然后在com.jasper.controller包下再细分各个功能的controller包)。Service存在service模块里,dao存在dao包里,这样从根源避免了重名问题。
      【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第8张图片

补充: build 时通过设置镜像进行加速

  • 在 maven /.m2/repository/settings.xml中修改
  • 在pom中修改:
    【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第9张图片

补充: 多模块下的 mybatis mapper 路径扫描变化
要把 classpath: 改为 classpath*: 意指全部模块的resource文件夹都被扫描
【SpringBoot多模块开发笔记】配置、模块间引用、包扫描、及功能的合理分配_第10张图片

你可能感兴趣的:(Java,spring,boot,maven,java)