spring-boot-maven-plugin打包遇到的问题

时间:2024-03-18 13:35:43

使用spring-boot-maven-plugin打包遇到的问题

最近在做springboot项目,导入了 spring-boot-maven-plugin 插件,采用分模块依赖

项目目录和关系依赖

spring-boot-maven-plugin打包遇到的问题spring-boot-maven-plugin打包遇到的问题

作为目的我想把它们打成jar包从而放在服务器上运行
首先我们先以common 和 eurekaserver 包为例
spring-boot-maven-plugin打包遇到的问题
当然 我们查看项目target 和本地仓库 发现已经打包好了
spring-boot-maven-plugin打包遇到的问题
spring-boot-maven-plugin打包遇到的问题
当然没有出现问题,打出的来的jar包也是可以正常运行。
当我们再来打message包的时候,我们采用 mvn package运行
spring-boot-maven-plugin打包遇到的问题
最后我们发现打包失败。
Failed to execute goal on project eSite-message: Could not resolve dependencies for project site.huzy:eSite-message:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at site.huzy:eSite-common:jar:0.0.1-SNAPSHOT: Failed to read artifact descriptor for site.huzy:eSite-common:jar:0.0.1-SNAPSHOT: Could not find artifact site.huzy:eSite-parent:pom:0.0.1-SNAPSHOT -> [Help 1]

当然我们本地仓库已经有了common的依赖,但是为什么会报错呢?

查了很多资料,大多没用,最后在这边文章里面找到了答案
点击查看

spring-boot-maven-plugin打包出来的jar是不可依赖的

我们现在整合后的maven项目有一个parent工程,打包类型为pom,下面多个spring-boot工程作为它的module,分别为base和moduleA,moduleB。假如moduleA依赖于base。如果你在base中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。那么在clean package的时候会发现moduleA找不到base中的类。原因就是默认打包出来的jar是不可依赖的。

解决方案

官方告诉我们,你如果不想移代码,好吧,我这样来给你解决,给你打两个jar包,一个用来直接执行,一个用来依赖。于是,你需要指定一个属性classifier,这个属性为可执行jar包的名字后缀。比如我设置exec,原项目名为Vehicle-business。那么会得到两个jar:Vehicle-business.jar和Vehicle-bussiness-exec.jar

官方文档位置:84.5 Use a Spring Boot application as a dependency

总结:回到聚合maven上,如果你在parent工程中使用了spring-boot-maven-plugin作为builder,那么你的依赖module一定要用解决方案二来设置。否则你不在parent工程中用spring-boot-maven-plugin作为builder,而在需要打包的module上使用。
在次级依赖添加< configuration >< classifier >exec< /classifier ></ configuration>
spring-boot-maven-plugin打包遇到的问题
最后我们进入工程
首先先执行mvn package && mvn install 对父工程进行打包
我们看到本地仓库已经存在依赖
spring-boot-maven-plugin打包遇到的问题
最后我们对message进行打包,我们发现成功!
spring-boot-maven-plugin打包遇到的问题
spring-boot-maven-plugin打包遇到的问题
最后我们发现已经打包成功了。
如果不足,请各位留言和补充。