一、使用场景
当需要修改某个jar包中的某个文件中的某段代码时,可以使用本方法。
例如:优化jar包中的代码逻辑、新增jar包的代码逻辑、修改jar包中的加解密与校验方法等。
二、特点
仅对某个jar包的某个文件的某段代码进行了修改,不影响jar包其它功能的正常使用。
只需要jar包就能完成修改,不需要源代码。
三、使用方法
1.使用IntelliJ IDEA打开某个项目,点击左侧栏下的External Libraries,找到准备修改的jar包,例如abc.jar。(maven项目)
2.继续点击abc.jar左侧的下拉三角,找到准备修改的class文件,例如Main.class,双击打开,之后左侧就会显示出idea反编译后的java代码。(也许这个功能需要插件,记不清了,如果需要可以百度。)
3.就在本项目中,最好是src/test/java下,创建文件夹,按照Main.class的package内容创建;例如"package com.apache.common;"
就创建com/apache/common这样的文件夹。
(在本项目中可以省去配置依赖maven的步骤,因为已经配好了;在test下是因为目录结构比较清晰,好找)
4.在刚创建的文件夹下,创建java文件,与准备修改的class文件同名,例如Main.java
5.将class文件中的内容按ctrl+A全选,复制-粘贴到新创建的java文件中,例如Main.class->Main.java
*因为在同一个项目中,package也相同,所以什么也不用修改,也不会出现import语句报错的情况。
6.之后,根据需要修改Main.java文件的代码即可。
7.修改完成后,右击Main.java,选择Recompile 'Main.java',就可以将Main.java编译成class文件;
可以在target/test-classes/下找到Main.class文件。
接着准备把这个class文件替换进jar包中。
8.打开IDEA的settings,搜索maven,可以看到Local repository中配置的地址,这个地址中有目标jar包。(或者拿Everything搜索更快,一个搜索软件)
9.打开我的电脑,找到目标jar包,路径例如:C:\Users\myuser\.m2\repository\com\apahce\abc\1.0\abc.jar
10.使用winRAR打开abc.jar,找到Main.class所在的位置;然后复制刚才在test路径下修改好后的Main.class,粘贴进abc.jar中替换掉旧class即可。
(保险起见可以先备份一下abc.jar,恢复用)
11.启动项目,项目会用到刚才修改后的abc.jar;再次打开左侧栏下的External Libraries,找到abc.jar中的Main.class,双击打开,就可以发现修改成功了。
四、后记
本文用于解决之前的文章中反编译jar包的问题:
https://blog.csdn.net/BHSZZY/article/details/115326544