SpringBoot多模块打包过程问题解析及处理方式
项目结构
- 模块主要分为parent父模块、common公共组件模块、service项目服务模块(web入口模块)
文章插图
整体思路
- 梳理引入依赖逻辑 , 防止重复引入
- 处理打包过程中遇到的问题
在common_base(基础组件模块)中已经引入了对于工具模块的依赖 , 在service模块引入依赖时就只需要引入common_base即可 , 防止对common_utils的二次依赖 , 导致后续引入依赖时逻辑混乱的情况;
建议在做多模块开发是设计好引入依赖的逻辑结构 , 清晰的引入规则可以有效规避掉很多打包过程中的问题 。
文章插图
文章插图
2、打包过程中遇到的问题分析及解决方式总结问题一:repackage failed: Unable to find main class
文章插图
【SpringBoot多模块打包过程问题解析及处理方式】原因:出现该问题的原因是模块中引入了spring-boot-maven-plugin , 打包的时候它去寻找SpringBoot的启动类 , 但它没有找到 , 所以打包失败 。
解决:
方法一: 直接将pom中的spring-boot-maven-plugin相关代码删除
这种方法对于我的项目来说不推荐 , 因为common_base的pom文件中是没有引入spring-boot-maven-plugin的 , 而是继承自父模块的pom文件 , 我需要将父模块的spring-boot-maven-plugin重复引入到其他子模块中 。
方法二: 通用解决办法:下配置mainClass , 指定程序入口
我的项目中有基础服务模块 , 所以只需要将工具模块的启动程序挂在到基础服务模块的启动类上即可 。
-
org.springframework.boot spring-boot-maven-plugincn.ncepu.service_bases.BasesApplication repackage
方法三: 如果你的pom继承自spring-boot-starter-parent(注意此前提) , 也可以直接在配置(其实这里的start-class直接对应清单文件里的Start-Class):com.xx.webapps.api.main.WebappsApiBidMain
问题二:springboot多模块打包报错 , 找不到common包 , 找不到工具类此问题为偶发性问题 , 会出现偶尔可以打包成功 , 偶尔打包报错的情况- 问题分析:service_bases模块打包的时候 , 找不到common_util公共组件模块的包 , 找不到common_util公共组件模块的类
- 原因:1、common_util不能添加spring-boot-maven-plugin插件 , 如果添加了spring-boot-maven-plugin , 当运行maven的package打包命令时 , 这个SpringBoot插件会在Maven的package后进行二次打包 , 目的是生成可执行jar包;2、二次打包后其他模块引用common_util模块就会报错找不到common包 , 找不到工具类错误
方法一:common子项目模块 , 只加如下插件
org.apache.maven.plugins maven-resources-pluginUTF-8
方法二: 子项目如果要打包 , 也可以使用maven-jar-plugin打包工具 org.apache.maven.plugins maven-jar-plugin
文章插图
打包成功
后记在打包结束之后我检查了一下打包后的jar包 , 发现除了打包好的jar包之外 , 还有一个.original文件 。
文章插图
这个文件有什么用?
.jar.original 是普通jar包 , 不包含依赖;是上一次打包的备份文件.jar 是可执行jar包 , 包含了pom中的所有依赖 , 可以直接用java -jar 命令执行;
官方文档:…
可以用jar tvf target/xxx-0.0.1-SNAPSHOT.jar.original查看文件内容 。
可以看出original文件只包含少量用户的类 , 不包含依赖 。 如果包含依赖的.jar叫 fat jar, 那这个就是瘦jar了 。
Spring Boot Maven plugin的5个Goals:
- spring-boot:repackage , 默认goal 。 在mvn package之后 , 再次打包可执行的jar/war , 同时保留mvn package生成的jar/war为.original
- spring-boot:run , 运行Spring Boot应用
- spring-boot:start , 在mvn integration-test阶段 , 进行Spring Boot应用生命周期的管理
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 占营收|华为值多少钱
- 查询|数据太多容易搞混?掌握这几个Excel小技巧,办公思路更清晰
- 商品|问道自有品牌,山姆多方博弈
- 垫底|5G用户突破2亿:联通垫底,电信月增700万,中国移动有多少?
- 色卡|双人场景/多机位色彩匹配,色卡很重要
- 砍单|iPhone12之后,拼多多又将iPhone12Pro拉下水
- 打响|拼多多打响双12首枪,iPhone12降到“mini价”,苹果11再见
- 不到|苹果赚了多少?iPhone12成本不到2500元,华为和小米的利润呢?
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人