Java项目中 Jar 包增量更新办法,解压修改 Jar 包中的文件后重新打成 Jar 包

前言

项目中都会打包成 jar 文件,然后上传服务器运行。往往一个项目或大模块打包成一个jar包,而我们有时候我们因为各种情况:需要更新其中的一个或几个文件

  1. 修改配置文件、静态文件
  2. 修改 jar 包,class 文件
  3. 网不好,jar 文件太大。
  4. 等等 and so on

不想因为一点简单的操作完成 源码 -> 编译 -> 打包 -> 上传 等流程。
我们可以对 jar 包进行增量更新。(网上那种改 zip 再改 jar 的,你动手试验一下啊,被你们骗的好惨)

另外想根本上实现小的项目jar包,可以修改Maven项目打包方式,可以参考我最新文章《基于spring-boot-maven-plugin插件打包lib文件外置,layout模式为ZIP模式》

现有的工具

使用 jdk 提供的现有工具 jar 命令

jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

操作

准备 jdk 环境, 增量更新直接查看更新 jar 包

解压 jar 包

jar -xvf [jar包名称] 命令解压 jar 包
Java项目中 Jar 包增量更新办法,解压修改 Jar 包中的文件后重新打成 Jar 包_第1张图片
其实增量时,就是我们保持这样解压出来的的文件结构,使用增量更新命令对目标 jar 进行更新就可以了。

增量更新 jar 包

jar -uvf0 [jar包名称] [文件夹绝对路径]

-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-0 仅存储; 不使用任何 ZIP 压缩

如下结构,我就以一个 application.yml 文件进行增量更新 jar 包为例

└─test
    │  xxx.jar
    │
    └─BOOT-INF
        └─classes
                application.yml

在jar包目录执行增量更新命令进行增量更新,这样 jar 包中的文件就被我们替换为同级目录文件中的文件。

jar -uvf0 xxx.jar BOOT-INF

详情如下图所示:
在这里插入图片描述
jar 包内被更新
Java项目中 Jar 包增量更新办法,解压修改 Jar 包中的文件后重新打成 Jar 包_第2张图片

总结

  1. 使用命令解压 xxx.jar 包,命令:jar -xvf xxx.jar;
  2. 与解压后的目录保持一致上传增量文件;
  3. 使用 jar -uvf0 命令将指定文件更新到 xxx.jar 里面,重启即可

祝大家玩的愉快!!!

你可能感兴趣的:(笔记,jar,java,服务器)