修改jar中.class文件

背景:在开发中遇到三方jar包中出现了错误,需要修改相关代码进行更新
1、查看.class文件
jar包就相当于一个压缩文件,windows中直接解压就行。
可以在 jd-gui 中查看要修改的.class文件,或者把.class文件拖进idea中查看。
2、修改.class文件
方法一:在解压的文件夹下,新建与class文件同名的java文件,把class中的代码复制到java中,并修改相关代码,最后在命令行中运行javac命令编译成.class文件与之前的进行替换。(如果依赖其他的class文件,就用javac -cp 命令)
方法二:如果要修改的.class文件中存在很多依赖的jar,使用javac命令就没办法实现(比如Android的文件)。
这时考虑使用 javassist ,直接在idea中导入官网下载的jar包就能使用,具体用法可以 参考官网 或者 别人的blog(刚开始可以写个demo运行一下,个人感觉语法和反射的用法很像)。
同样得到.class文件之后替换之前的文件。
在使用javassist时遇到的一些坑记录如下:
【修改jar中.class文件】1. 如果使用setBody方法无效可以删除方法之后再把方法加进去
2. 删除方法是自上而下的删除,如果存在好多相同名字的函数(即重载),需要使用 getDeclaredMethods 获取重载方法的数组
3、重打jar包
进入之前解压的目录下,在命令行中运行
jar cvf xxx.jar . // "."代表当前路径

参数f:指定打包后的包名。
参数c:指定是创建新的归档文件。
参数v:在标准输出中生成详细输出,该选项是可选的。

    推荐阅读