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

前言

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

单体

单体项目和多模块项目jar包补丁部署注意事项_第1张图片
使用maven打包后在target中生成jar包文件,使用压缩包打开后可以看到这样的目录结构
单体结构下目录简单明了,替换的class文件直接在cn目录进去找到,目录下都是class文件然后替换即可。替换mapper或者其他配置文件也是如此。
单体项目和多模块项目jar包补丁部署注意事项_第2张图片

特别注意:如果你添加依赖,并把依赖的jar放到lib下,你的jar不能被压缩,否则会出现以下情况
单体项目和多模块项目jar包补丁部署注意事项_第3张图片
这里看到我添加进去的jar已经被压缩了,添加前后大小不一致。启动后
单体项目和多模块项目jar包补丁部署注意事项_第4张图片
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包补丁部署注意事项_第5张图片
添加进去后可以看到压缩前后大小一致,测试启动正常。
单体项目和多模块项目jar包补丁部署注意事项_第6张图片
单体项目和多模块项目jar包补丁部署注意事项_第7张图片

多模块

单体项目和多模块项目jar包补丁部署注意事项_第8张图片
这里首先介绍以下多模块jar包结构,其classes目录下只有start模块下的启动类
单体项目和多模块项目jar包补丁部署注意事项_第9张图片
原因我们可以在start模块的pom文件中看到,其他模块都是作为start模块的依赖来引入的,那么依赖一定都是在lib目录下。
单体项目和多模块项目jar包补丁部署注意事项_第10张图片
很快嗷,在lib目录下找到了这些模块
单体项目和多模块项目jar包补丁部署注意事项_第11张图片
随便打开其中一个就可看到其中熟悉的目录,以及被编译后的class文件。
单体项目和多模块项目jar包补丁部署注意事项_第12张图片
在多模块下,如果修改了某处地方,可以将修改的那个模块打包上传然后替换,当然务必记住jar不能压缩,否则启动后也会报上述单体项目一样的错误。其解决方式和单体的添加依赖jar包一致,可以看上面。

jar为什么不能压缩

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

其他解决方式

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

你可能感兴趣的:(随记,jar,java,maven,idea)