使用jd-gui反编译修改jar包里的.class并重新生成新jar问题
作者:wetools.online
这篇文章主要介绍了使用jd-gui反编译修改jar包里的.class并重新生成新jar问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
准备工具:
jd-gui.exe反编译工具
下面以我本地修改graphql-java-15.0.jar
包为例:
1.准备jar包
新建origin文件夹
将jar包通过win.rar或当前文件夹cmd运行解压命令jar -xvf graphql-java-15.0.jar
解压到origin文件夹内
2.使用 jd-gui工具
打开graphql-java-15.0.jar
假如我要修改Assert.class,不要在 jd-gui工具里面修改,先ctrl+s
保存要修改的文件到某目录
我保存在跟graphql-java-15.0.jar
同目录下
3.使用文本编辑工具(我用nodepad)
修改java文件里的某段逻辑,然后通过命令重新编译该java文件为class文件
javac -cp graphql-java-15.0.jar Assert.java // -cp graphql-java-15.0.jar 表示Assert.java编译时依赖graphql-java-15.0.jar
4. 用编译好的Assert.class
替换掉原先解药的origin目录里的,使用命令将origin目录里的文件打包为新的jar包:
先进入到origin,执行打包命令:
jar -cvfm0 graphql-java-15.0-modify.jar META-INF/MANIFEST.MF ./
至此便生成新的jar包
5. 引用修改后的jar包
将jar包放在项目lib,修改pom文件
注意!!!
原本通过pom引入的jar包,如果有外部包,要手动引入,我们修改后引入的graphql-java-15.0-modify.jar不会自动导入这些外部依赖包
在pom文件引入:
<!--graphql-java-15.0.jar依赖的其他jar begin--> <dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> <version>4.7.2</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>java-dataloader</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.reactivestreams</groupId> <artifactId>reactive-streams</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.29</version> </dependency> <!--graphql-java-15.0.jar依赖的其他jar end-->
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。