单体项目和多模块项目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

相关推荐
手握风云-3 分钟前
Spring AI:让大模型住进 Spring 生态(三)
java·后端·spring
咸鱼2.01 小时前
【java入门到放弃】Dubbo
java·开发语言·dubbo
JAVA面经实录9177 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午9 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U10 小时前
JavaEE|多线程初阶(七)
java·开发语言
掌心向暖RPA自动化13 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭13 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev13 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试