通用方法 —— 解压后重新打包 Jar 包
这个通用方法,就是将 Jar 包进行解压,修改或替换文件后,重新打包成 Jar 包的方式。这个方法需要部署 JAVA jdk,需要用到其中的 jar 命令。
我们可以先看下 jar 命令的官方说明,0
参数是关键。
用法: 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/ .
所以流程就是这样的,首先解压 jar 包。
jar -xvf test.jar
进入文件夹编辑或者替换需要更改的文件,然后重新进行打包,加了 0
参数表示只打包不压缩。
jar -cvf0m test.jar ./META-INF/MANIFEST.MF .
不要漏了这个 MANIFET.MF 文件,,这个文件里面记录了该 JAR 包的版本、创建人和类搜索路径等信息。如果一个 JAR 文件被当作可执行文件,则其中的 MANIFEST 文件需要指出该程序的主类文件,漏掉了则不能正常执行。
Windows 方式
在 Windows 上因为有许多完善好用的 GUI 应用,编辑起来就简单很多。Jar 包通常可以通过安装的压缩软件直接打开,所以至少要安装一个压缩软件,我想基本上每个人都会有的。
仅文本文件
对于文本文件来说,一般可以直接在 Jar 包里打开,修改保存后,压缩软件会提醒说文件已经修改,是否更新到 Jar 包中,点确定即可。
所有文件
所有文件,都可以通过将文件拖进 Jar 包的方式,添加或替换内容。需要注意的是,压缩方式需要选择存储 / 不压缩,或是其他类似的表达。当然也可以通过上面的通用方法解决。
Linux 方式
我指的 Linux 方式,基本就是指命令行的方式,不包含桌面操作,那个我不是很了解,或许会和 Windows 上的操作比较接近。
仅文本文件
首先需要系统里面安装 vim 和 zip 两个包,如果是 Ubuntu,可以运行 sudo apt install vim zip -y
安装。
然后你可能已经想到了,那就是通过 vim 工具打开 Jar 包,将会显示 Jar 包中的所有文件夹和文件绝对路径,每行显示一个。
通过将光标移动到需要修改的文件上,回车进入文件,像编辑普通文件一样进行修改,修改完成后,:wq
退出返回到文件列表。
接下来可以选择继续编辑其他文件或退出 Jar 包。退出 Jar 包时,请一定要通过:q
退出,这个很重要,如果你像上面保存文件一样加了 w 参数,这个 Jar 包就废了,它将会变成保存了文件列表的一个文本文件。所以请千万通过:q
参数退出 Jar 包,切记!