一、需求:

 第三方jar包中的代码不符合项目的需求,需要对某个class文件进行修改,从而满足项目的需求。通常采用对class文件进行反编译,然后在重新生成jar包。但是反编译的结果不能100%正确,所以直接对class文件进行修改更为直接、可靠。

二、安装jclasslib Bytecode Viewer插件

IEDA: File\Settings\Plugins,在MarketPlace中搜索jclasslib Bytecode Viewer插件,重启IDEA使插件生效

三、准备要修改的class文件

  1、IDEA对jar包中的代码进行调试,通过断点确定需要修改的类,该类中的属性或函数。如:GenericHibernateDao类 sendHistoryMessageToRedis方法中的某个字段需要修改。

  2、在IDEA中选择该class文件,选择View\Show Bytecode With Jclasslib打开jclassLib插件对话框3、在方法中找到sendHistoryMessageToRedis,选择code找到该字符串对应的ID:45


4、点击ID45,跳转到常量池,获取字符串对应的行号:418

四、修改Class文件

1、IDEA中新建工程,创建ModifyClassFilesTest.java文件。该文件需要修改3个地方:
①、filePath为class文件的路径;
②、修改行号;
③、修改要写入的内容为:"Reids’s Key: "。

import java.io.*;import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.Constant;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;public class ModifyClassFilesTest {public static void main(String[] args) throws Exception {String filePath = "E:\\common\\dao\\impl\\GenericHibernateDao.class";FileInputStream fis = new FileInputStream(filePath);DataInput di = new DataInputStream(fis);ClassFile cf = new ClassFile();cf.read(di);Constant[] infos = cf.getConstantPool();int count = infos.length;for (int i = 0; i < count; i++) {if (infos[i] != null) {if(i==165){\\Class文件中对应的行号System.out.print(i);System.out.print(" = ");System.out.print(infos[i].getVerbose());System.out.print(" = ");System.out.println(infos[i]);System.out.println(infos[i].getClass().getSimpleName());ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];//根据对应的类型转换uInfo.setString("Reids's Key: ");//设置对应内容infos[i]=uInfo;}}}cf.setConstantPool(infos);fis.close();File f = new File(filePath);ClassFileWriter.writeToFile(f, cf);}
}

2、导入依赖,已经在IEDA中安装了jclasslib的插件,所以相关jar包的路径为:C:\Users\用户.IntelliJIdea2019.3\config\plugins\jclasslib\lib,将该路径下的jar包都导入到工程中。
3、运行ModifyClassFilesTest,执行后jar包中的class文件已经被修改

五、注意

1、修改前对jar包和class文件进行备份
2、该方式只适用于修改字符串(我认为)

jclasslib修改jar包中class文件 IDEA相关推荐

  1. jd+jbe修改jar包中class文件

    有时候从网上下的java demo中,有的是发布后的环境,所以只有jar包信息,没有对应的源码,我们要把其中的信息修改下,所以就需要我们本文中提到的直接修改java class信息.参考网上资料好,赶 ...

  2. 修改jar包中class文件

    需求:银行跑批任务执行时要调用行方自己的短信平台给科技部人员发送短信,行方提供一个jar文件,通过shell脚本传参调用即可. 问题点:shell脚本调用jar包没太大问题,关键在于,需要在jar包中 ...

  3. Web项目替换jar包中的文件的方法

    经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...

  4. java -uf_Java如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  5. 使用jar命令替换jar包中指定文件

    一.jar命令用法 -c 创建新的归档文件-t 列出归档目录和文件-x 解压缩已归档的指定(或所有)文件-u 更新现有的归档文件-v 在标准输出中生成详细输出 / 提供更详细输出信息-f 指定归档文件 ...

  6. Linux修改jar包中的配置文件

    打包以及修改jar包 cd genesys_data_etl mvn clean package -Poffline -Dmaven.test.skip=true 日志如下: [INFO] --- m ...

  7. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  8. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  9. 获取jar包中的文件,及遍历jar包中的文件

    获取jar包中的文件 ClassPathResource resource1 = new ClassPathResource("文件夹" + File.separator + &q ...

  10. java获取jar包中的文件资源

    java获取jar包中的文件资源 一.问题示例 1.1 项目开发时 1.2 打包成jar后 二.解决方案 2.1 解决方法 2.2 实现 问题描述:   我们常常在代码中读取一些资源文件(比如图片,音 ...

最新文章

  1. 干货 | 旷视科技俞刚:我在旷视研究院做检测
  2. int/double/string使用
  3. 在用户控件中操作父页面上的控件
  4. photoshop(ps) cs6中文版
  5. 8.2 matlab曲线对象和曲面对象(曲线对象、曲面对象、光照处理、图形对象的反射特性)
  6. 做java技术天花板在哪里?我突然发现影响你晋升的竟然不是技术!
  7. csv python 图片 存_Python读取CSV文件并存储到MySQL
  8. 初始化跟路由相关的定时器
  9. ORACLE 批量实例分析
  10. Linux之ssh-copy-id命令
  11. 我的世界服务器换披风的网站,我的世界评测_我的世界正版披风怎么换|或_游戏手机游戏-中关村在线...
  12. Oracle RAC tns 00505,Alert Log Errors: 12170 TNS-12535/TNS-00505: Operation Timed Out
  13. MSP432P401R学习:CCS入门实验练习,使用CCS新建、导入、编译、下载工程
  14. Windows Server 2016 (Updated Feb 2018) (x64)下载
  15. 【人物志】美团技术委员会前端通道主席洪磊:爱折腾的斜杠青年
  16. Guawa的Splitter的工具类
  17. 禾瑞亚USB接口电阻触摸屏控制卡QNX 6.5 RTOS操作系统x86架构驱动安装与配置方法
  18. 零知开发板和红外人体感应模块使用
  19. 【视觉SLAM十四讲】视觉里程计—特征点法
  20. windows10添加开机自启动项在哪设置?电脑开机自启动怎么设置

热门文章

  1. PDCA循环管理全面解析(含操作指南、案例应用)
  2. 一位声音甜美的小老师的Oracle学习视频
  3. 【锐捷无线】加密配置
  4. SDK接入学习(一):PlayerSetting详解(PC、Mac、Linux)
  5. 常用音频.mp3压缩方法(Mac端)
  6. 考研复试对计算机专业了解,装备学院计算机专业综合(905)2017年考研复试大纲...
  7. 机械制图中有关螺纹的命名及标注
  8. Python 微信自动发送消息
  9. java服务器后端框架_现在主流的java后端框架
  10. BitviseSSH绕过4A内网直连服务器