1、新建项目

spring boot 加入新模块 springboot新建模块_spring boot

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

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

spring boot 加入新模块 springboot新建模块_java_02

2、修改pom.xml文件

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

spring boot 加入新模块 springboot新建模块_java_03

3、新建common模块项目

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

spring boot 加入新模块 springboot新建模块_java_04

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

spring boot 加入新模块 springboot新建模块_spring boot 加入新模块_05

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

spring boot 加入新模块 springboot新建模块_java_06

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

spring boot 加入新模块 springboot新建模块_spring boot 加入新模块_07

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

4、web模块和entrance启动模块

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

spring boot 加入新模块 springboot新建模块_maven_08

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

spring boot 加入新模块 springboot新建模块_spring boot 加入新模块_09

5、整合

1)关联依赖

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

spring boot 加入新模块 springboot新建模块_spring boot_10

spring boot 加入新模块 springboot新建模块_maven_11

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

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

spring boot 加入新模块 springboot新建模块_java_12

3)启动类模块配置文件

spring boot 加入新模块 springboot新建模块_intellij-idea_13

6、测试项目

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

spring boot 加入新模块 springboot新建模块_spring boot 加入新模块_14

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

7、打包项目

1)配置maven打包插件

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

spring boot 加入新模块 springboot新建模块_java_15

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

spring boot 加入新模块 springboot新建模块_intellij-idea_16

2)按依赖程度依次打包

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

spring boot 加入新模块 springboot新建模块_maven_17

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

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

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

1)新建处理类

public class UniqueNameGenerator extends AnnotationBeanNameGenerator {

    @Override
    public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
        //全限定类名
        String beanName = definition.getBeanClassName();
        return beanName;
    }
}

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

@ComponentScan(nameGenerator = UniqueNameGenerator.class)