| 问题描述:在开发中遇到使用第三方jar时想要修改里边某个class文件的情况解决方法:
 通过jclasslib直接修改class文件
 安装jclasslib可以通过下载jclasslib软件来安装(不推荐)在IEDA插件中搜索安装jclasslib Bytecode Viewer(推荐)
 查看修改源码的信息将jar包内要修改的class文件拖到IDEA中点击IDEA工具栏中:View => Show Bytecode With Jclasslib
 jclasslib页面主要有Constant Pool、Interfaces、Fields、Methods、Attributes
 
  在Methods下找到对应的方法,点击code再点击右侧的bytecode
 
  点击#23依次点击到最终位置,显示的是常量池第109个常量 通过代码修改class文件package com.logan.functions.controller;
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 Test {
    public static void main(String[] args) throws Exception {
        String filePath = "D:\\CaptchaUtil.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 == 109){
                    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("image/png");
                    infos[i] = uInfo;
                }
            }
        }
        cf.setConstantPool(infos);
        fis.close();
        File f = new File(filePath);
        ClassFileWriter.writeToFile(f, cf);
    }
}
 执行代码是可能会缺少部分jar,缺少的jar包可以在IDEA安装插件的目录下找得到一般路径为:
 C:\Users\用户名\.IntelliJIdea2019.1\config\plugins\jclasslib\lib |