使用javassist修改jar包里class文件
参考:使用javassist修改jar包里class文件_淹死的鱼0719的博客-CSDN博客
一、javassist依赖
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.28.0-GA</version>
</dependency>
二、编写修改.class文件
注意:文件目录
jar包要放在工程目录下!!!
public static void main(String[] args) {
// 获取 Jar 包
ClassPool classPool = ClassPool.getDefault();
classPool.insertClassPath("D:\\test\\test.jar");
// 参数为jar包里的 .class 文件全类名,对应要修改的方法的类
CtClass c2 = classPool.getCtClass("com.kk.A");
// A类有参方法
CtMethod aMethod = c2.getDeclaredMethod("methodName", new CtClass[]{classPool.makeClass("java.lang.String")});
// 重置方法体,方法体里面的参数要用$1,$2...代替, 涉及的类要用全类名
aMethod.setBody("方法体");
// A类无参方法
CtMethod bMethod = c2.getDeclaredMethod("methodName");
// 重置方法体,涉及的类要用全类名
bMethod.setBody("{方法体}");
c2.writeFile();
}
执行
三、替换class类
用生成的.class
文件替换原.class
文件,工具7Z
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决