单体项目和多模块项目jar包补丁部署注意事项

前言

目前接触的项目结构主要有单体项目和多模块项目,且这些项目是部署在网络环境一般的服务器上,随着项目规模变大,单个jar的体积动辄就上百MB,每一次代码小改动不可能都上传整个jar,每次代码改动后可能就是把编译后的class文件在服务器上做一个替换,或者直接使用arthas临时更改代码逻辑,但在我所处的环境下并不建议使用arthas(其修改的代码只在当此运行时才生效,因为登录这个服务器做其他工作的人员比较多,不排除会重启该程序,如果重启后原来改动随即失效)。下面简单介绍一下单体架构和多模块架构补丁部署时注意事项(仅供参考)。

单体


使用maven打包后在target中生成jar包文件,使用压缩包打开后可以看到这样的目录结构

单体结构下目录简单明了,替换的class文件直接在cn目录进去找到,目录下都是class文件然后替换即可。替换mapper或者其他配置文件也是如此。

特别注意:如果你添加依赖,并把依赖的jar放到lib下,你的jar不能被压缩 ,否则会出现以下情况

这里看到我添加进去的jar已经被压缩了,添加前后大小不一致。启动后

java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/hutool-all-5.8.18.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file这样一个错误。其原因就是jar被压缩了。

怎么解决?

我电脑上安装的压缩软件是Bandizip,点击添加、更多选项、在压缩级别选择仅存储。(如果你使用的rar或者其他压缩软件,可以自行搜索相应方法)

添加进去后可以看到压缩前后大小一致,测试启动正常。

多模块

这里首先介绍以下多模块jar包结构,其classes目录下只有start模块下的启动类

原因我们可以在start模块的pom文件中看到,其他模块都是作为start模块的依赖来引入的,那么依赖一定都是在lib目录下。

很快嗷,在lib目录下找到了这些模块

随便打开其中一个就可看到其中熟悉的目录,以及被编译后的class文件。

在多模块下,如果修改了某处地方,可以将修改的那个模块打包上传然后替换,当然务必记住jar不能压缩,否则启动后也会报上述单体项目一样的错误。其解决方式和单体的添加依赖jar包一致,可以看上面。

jar为什么不能压缩

jar包在经过手动解压缩和压缩后可能会出现无法运行的问题,这可能并非代码本身的问题,而是与压缩方式有关。当jar包的大小发生变化时,可能会导致文件内容或结构的改变,从而影响到jar包的运行。

其他解决方式

参考:https://www.cnblogs.com/dayou123123/p/6845432.html

相关推荐
云游12 小时前
Jaspersoft Studio community edition 7.0.3的应用
java·报表
帅气的你12 小时前
Spring Boot 集成 AOP 实现日志记录与接口权限校验
java·spring boot
zhglhy12 小时前
Spring Data Slice使用指南
java·spring
win x12 小时前
Redis 主从复制
java·数据库·redis
weixin_4239950013 小时前
unity 处理图片:截图,下载,保存
java·unity·游戏引擎
帅气的你13 小时前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式
qq_1780570713 小时前
基于minio实现的分片上传-支持断点续传
java
高山上有一只小老虎13 小时前
灵异背包?
java·算法
码农水水13 小时前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php
qq_25183645713 小时前
基于java Web 个人网站系统设计与实现
java·开发语言·数据库