> 文章列表 > Sprinboot聚合项目归荑

Sprinboot聚合项目归荑

Sprinboot聚合项目归荑

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版本是指定死的,所以可以放心勾选。