目录
参考:直接修改和替换 Jar 包中文件的几种方式 | 随遇而安 (iszy.cc)
1.使用反编译软件jd-gui软件进行返编译
File->open File 打开要反编译的jar包
找到需要反编译的.class 文件 然后另存为成.java
2. .java重新编译问题
然后修改.java文件 重新编译,重新编译遇到的问题就是 当前的.java 文件引用了好多其他的类 如果直接 javac xxxx.java 报错信息如下:
注意这里容易出问题,因为当前java文件可能有一些依赖其他jar包的代码,那就需要一个一个引入
这种我没有实现
第二种:就是创建一个空项目然后把这个类 和所需的依赖按照该项目的结构创建导入进行编译
生成jar 后拿到新的.class文件 我使用这种实现
然后替换原先jar中的.class 重新打包
3. 重新打包的问题
1.指令打包
#解压jar包
jar -cvf xx.jar *
手动替换class文件
# 压缩
jar -cvf0m test.jar ./META-INF/MANIFEST.MF . 这个命令很重要
# 压缩-错误命令-网上大部分是下面这个,运行报错
jar -cvfm test.jar ./META-INF/MANIFEST.MF .
原因是: 文件中的依赖jar包 不能再进行压缩打包了
2.使用压缩工具进行解压和压缩
压缩的使用 压缩级别选择 存储 不能选择压缩 不然跟上面一样报同样的错误
Linux 方式
我指的 Linux 方式,基本就是指命令行的方式,不包含桌面操作,那个我不是很了解,或许会和 Windows 上的操作比较接近。
仅文本文件
首先需要系统里面安装 vim 和 zip 两个包,如果是 Ubuntu,可以运行 sudo apt install vim zip -y
安装。
然后你可能已经想到了,那就是通过 vim 工具打开 Jar 包,将会显示 Jar 包中的所有文件夹和文件绝对路径,每行显示一个。
通过将光标移动到需要修改的文件上,回车进入文件,像编辑普通文件一样进行修改,修改完成后,:wq
退出返回到文件列表。
接下来可以选择继续编辑其他文件或退出 Jar 包。退出 Jar 包时,请一定要通过:q
退出,这个很重要,如果你像上面保存文件一样加了 w 参数,这个 Jar 包就废了,它将会变成保存了文件列表的一个文本文件。所以请千万通过:q
参数退出 Jar 包,切记!