本文以maxwell框架与mysql8的编码冲突为例,记录修改jar包中文件中的class文件,并在修改后重新编译打包。
(1)找到冲突包以及类:
首先找到maxwell框架中哪个jar包中的哪个class文件与mysql8有编码冲突问题
经过各种百度确定是StringColumnDef.class冲突,报错信息为:
java.lang.RuntimeException: error: unhandled character set 'utf8mb3'
at com.zendesk.maxwell.schema.columndef.StringColumnDef.charsetForCharset(StringColumnDef.java:61)
class类的路径:com.zendesk.maxwell.schema.columndef.StringColumnDef
(2)IDEA新建一个maven工程,然后导入class类所在的jar包
file->Project Structure->Libraries->+>Java->jar包
(3)修改class类
在maven项目中新建一个跟待修改lass文件一样路径的package和Java文件,把待修改的class文件内容复制到新建的Java文件中,然后在新建的java文件中修改内容
(4)解决内容复制到新的java文件后import 错误
通过在pom.xml中导入依赖,具体形式可以借鉴jar包中的pom.xml,只导入需要的,如果分不清需要哪个,直接将原jar包中的依赖全部导入
(5)修改完成后,选中修改的文件,右键 Build Module 'untitled1',然后在项目中找到这个路径下的class文件,就会出现target目录
(6)复制class文件并替换之前解压后的class文件
(7)重新编译打jar包
在文件目录jar11(maxwell-1.29.2)执行cmd,在执行命令
jar cfm maxwell-1.29.2.jar C:\Users\wht\Desktop\jar11\META_INF\MANIFEST.MF -C C:\Users\wht\Desktop\jar11\
打包完成后就会形成一个新的jar包
(8)执行完成后,会生成一个新的jar,把新的jar替换之前项目中的jar,然后重启项目打断点进行调试即可