背景:在开发中遇到三方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时遇到的一些坑记录如下:3、重打jar包
【修改jar中.class文件】1. 如果使用setBody方法无效可以删除方法之后再把方法加进去
2. 删除方法是自上而下的删除,如果存在好多相同名字的函数(即重载),需要使用 getDeclaredMethods 获取重载方法的数组
进入之前解压的目录下,在命令行中运行
jar cvf xxx.jar . // "."代表当前路径
参数f:指定打包后的包名。
参数c:指定是创建新的归档文件。
参数v:在标准输出中生成详细输出,该选项是可选的。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)