1、新建项目
然后 下一步 完成 即可,如果完成后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)新建处理类
public class UniqueNameGenerator extends AnnotationBeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
//全限定类名
String beanName = definition.getBeanClassName();
return beanName;
}
}
2)在启动类增加注解引用该处理类
@ComponentScan(nameGenerator = UniqueNameGenerator.class)