1、前言
在创建springboot项目时,都会有一个Main方法。如果将Springboot项目设计成聚合项目时,我们是不是要把所有的子项目都按照Springboot的方式创建呢?如果是会出现什么问题,以及我们怎么解决呢?
如果我们使用maven项目+Springboot项目混合使用,会有什么问题呢?
这些都是今天我们要探讨的问题。
2、纯Springboot搭建聚合项目
聚合项目的分层可以参照博主的另一篇文章:【微服务项目结构最佳实践】
2.1 创建父级工程
2.1.1 创建moudle或者project
因为Springboot项目的Packaging 没有pom的选项,这里可以直接使用默认的jar,创建完成之后修改成pom即可。
2.1.2 选择Springboot版本
因为是父级工程,所以只需要选择Springboot版本即可,然后完成创建。
2.1.3 删除多余的包,只留下pom.xml
a、pom中增加
<packaging>pom</packaging>
b、根据需要决定是否要删除dependencies,父级pom中的依赖可以被所有子项目共享。
c、指定Springboot启动运行的Main方法【这里不指定会出现问题,后面会介绍】
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>xxxx.xxxx.xxxx.Test02Application</mainClass>
</configuration>
</plugin>
</plugins>
</build>
d、根据需要配置是否跳过测试文件
<!--编译跳过测试文件检查的生命周期-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
2.2 创建子工程(被引用的工程)
2.2.1 选择moudle,同2.1.1、2.1.2
2.2.2 修改pom文件的parent标签,指向父级工程
<parent>
<groupId>com.simonking</groupId>
<artifactId>simonking-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
2.2.3 增加pom文件中packaging标签为jar
<packaging>jar</packaging>
2.2.4 删除pom中的 spring-boot-maven-plugin,可以直接依赖父级项目中的。
2.2.5 在父级pom中增加moudle
<modules>
<module>test01</module>
</modules>
2.3 创建子项目(启动的工程)
2.3.1 选择moudle,同2.1.1
2.3.2 选择同父级的springboot版本,然后选择需要依赖。
2.3.3 同2.2.3、2.2.4、2.2.5
2.4 遇到的问题以及解决方案
a、使用maven编译项目时,会出现“找不到主类”的报错
答:因为Springboot项目启动默认会加载 public static void main方法,当有多个时会报错。如果删除被引用的子项目的Main方法,又会出现“缺少主类”的错误,被引用的子项目并不需要Main方法。这时候需要我们再编辑时指定Main方法。也就是父级pom中mainClass的配置。这样可以完美的解决这个问题。
b、当主项目引用其他项目时,明明可以引用到其他包里的方法,编译的时候就会报“找不到类”,直接运行又可以正常运行。编译之后就会报错。
答:笔者根据网上的教程清除缓存,重启idea,并不能解决此问题。因为运行可以,编译出错猜测可能是maven的问题。这个猜测从stackoverflow上的得到验证:传送门
于是升级maven版本从3.6.1->3.9.1,问题解决。
3、使用maven+Springboot混合搭建
创建过程和Springboot创建很类似,可以将引用的项目使用maven创建,因为maven项目是可以选择parent的,父级pom中的moudles可以不用维护。
4、使用Springboot项目导入依赖的插件
这个插件还比较好玩的就是Springboot项目可以使用插件选择插件导入,就像创建项目选择依赖一样。
4.1 插件
4.2 使用
pom中alt + insert、选择Edit Starters
4.3 导入
这里的Springboot版本是指定死的,所以可以放心勾选。