• spring boot 新建多模块项目


    1、新建项目

    然后 下一步,勾选spring web依赖项,或其他你项目需要的依赖项

    最后点击完成 即可,如果完成后pom.xml里面的springboot版本报错,则将版本修改为2.6.6即可解决,可能是新的版本没那么稳定,更换成老的版本就不报错了。

    新建好后,文件结构只保留pom.xml以及idea必须文件,如下图:

    2、修改pom.xml文件

    pom.xml中,作为模块项目的父项目,groupId、artifactId、version是必须的,name、description可以删除,新增打包方式为pom(父级必须定义为pom),新增modules项配置,如下图:

    3、新建common模块项目

    在项目上右键菜单,选择新建 模块 ,和新建父项目一样,修改name和groupId,注意jdk版本,即可新建完成。

    案例中,新建的是一个共同类项目,可以删除掉除了src和pom.xml以外的东西,以及src下面的启动类、test包下的所有(可选删除),将application修改为yml文件精简配置。

    在父级pom.xml的modules配置中,增加子模块common

    在子级pom.xml配置中,groupId、artifactId、version这三项改为当前父级的,删除build下的全部,默认是maven打包插件(删除打包插件显得页面简洁,运行也正常,但是后续整个项目打包还是要加回去,所以可以不删除),如果没有特殊的依赖,可以删除properties、dependencies下的全部,如下图:

    dao和service模块和common一样的创建方法。

    4、web模块和entrance启动模块

    web模块基本创建如common一样,pom.xml文件稍有不同,增加packaging打包方式为jar(默认就是jar,可以不设置),因为是web模块,需要保留maven打包插件。

    entrance启动模块基本创建和common一样,pom.xml文件稍有不同,增加packaging打包方式为jar(可选),保留maven打包插件,dependencies依赖引入两个web。

    5、整合

    1)关联依赖

    根据谁依赖哪个引用哪个的依赖原则,在service中引入dao依赖,在两个web中引入service依赖,entrance引入两个web依赖(第4步已经引入了):

    2)修改启动类扫描包路径

    默认启动类entrance启动只会扫描当前模块项目下的包路径,需要增加配置使其扫描所有模块的包路径。当前创建的所有包都命名在“com.liang"下,所以直接配置一个即可,如果各个子模块包命名不一致,还需要使用数组方式配置多个包路径,如@ComponentScan(value={"com.liang","com.demo"})。类似的,如果使用mybatis,还需要增加Mapper的扫描,@MapperScan(value="com.liang")

    3)启动类模块配置文件

    6、测试项目

    在web中创建测试controller,特别注意,两个web创建的controller的类名不能重复,试过了,重复会报错。

    创建好后,启动项目,在浏览器分别输入localhost:8080/helloWeb01、localhost:8080/helloWeb02测试访问是否正常。

    7、打包项目

    1)配置maven打包插件

    启动模块配置文件需要配置启动类路径

    两个web都保留maven打包插件,需要配置忽略启动类,service、dao、common也需要把maven打包插件补上并都配置相同代码

    2)按依赖程度依次打包

    首先先执行一下父项目的install

    然后按谁依赖谁,从低到高一次点击install,顺序为common、dao、service、web01、web02、entrance。

    找到entrance子模块下target目录下的jar文件,在该目录下打开cmd,执行 java -jar entrance-0.0.1-SNAPSHOT.jar即可运行该项目

    8、不同模块类名相同无法启动解决方案

    1)新建处理类

    1. public class UniqueNameGenerator extends AnnotationBeanNameGenerator {
    2. @Override
    3. public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
    4. //全限定类名
    5. String beanName = definition.getBeanClassName();
    6. return beanName;
    7. }
    8. }

    2)在启动类增加注解引用该处理类

    @ComponentScan(nameGenerator = UniqueNameGenerator.class)

  • 相关阅读:
    《嵌入式 – GD32开发实战指南》第10章 串口通信
    配置Eureka时Status显示的是电脑名而不是localhost及ipAddr显示为本机ip的问题
    C++ 主函数几种语法
    [机缘参悟-60]:《兵者,诡道也》-1-开篇:“死“与“生“都是天道“
    【干货】【全网最全】【全网最详细】 javaWeb关于Thymeleaf+SpringBoot 的学习教程,看这一篇就够了。
    P2672 [NOIP2015 普及组] 推销员 day15
    ROS(1)话题模型
    Spark本地模式和集群模式安装配置
    双千兆网口路由器方案开发板香橙派R1 Plus LTS连接USB无线网卡测试说明(OpenWRT 系统)
    Hantek6022BE 虚拟示波器
  • 原文地址:https://blog.csdn.net/liangqibinde/article/details/127387156