0 序
- 背景
近期跟踪一个第三方组件
skywalking
针对spring cloud gateway
的traceId
丢失问题,需要对 skywalking 内部组件类进行跟踪,需要在其组件源码内部添加一些观察代码,做以增强。
- Q1: 我没有 thrid-party.jar 的源码————故直接在源码上修改,然后打包(此法行不通)
- Q2: 反编译出的源码,依赖了第三方社区(skywalking)内部的jar或者文件,解决不了依赖问题就无法打包(为了解决问题1只好对
thrid-party.jar
逆向工程,比如JD-GUI
)
以上问题阻挠重新打JAR包。
- 本方法的效果
本文章的方法,是Java语言的底层大法。在很多极端情况下,此法能解决相当重要的棘手问题。
-
本文实现了更换
class文件
,是根据参考文献
进行操作,实现了此目的。
-
如果打算更换JAR包内的
依赖JAR包
,可能会遇到如下错误,参见:参考文献[2] IllegalStateException: Failed to get nested archive for entry 问题解决 - CSDN
IllegalStateException: Failed to get nested archive for entry xxx
- 如下是操作过程(转载自
参考文献
)
1 操作过程
Step1 将jar包和将要替换的class
文件放到同一目录下
Step2 查找jar包中xxxdemo.class
文件所在的具体路径
- 命令如下:
jar -tvf xxxdemo.jar | grep xxxdemo.class
xxxdemo根据自己的jar包和类名替换
- 复制路径备用
Step3 将xxxdemo.jar中指定的xxxdemo.class解压出来
jar -xvf cas_client_all.jar com/baosight/buapx/security/filter/BuapxSecurityFilter.class
解压后如下:
Step4 将增强后的xxxdemo.class类 到com包下替换掉原来的类
Step5 将替换后的xxxdemo.class打进xxxdemo.jar中
命令:
jar -uvf cas_client_all.jar com/baosight/buapx/security/filter/BuapxSecurityFilter.class
- 替换后的效果:
使用
JD-GUI
反编译工具 打开JAR包
X 参考文献
- [1] 替换jar包中的class文件 - CSDN
- [2] IllegalStateException: Failed to get nested archive for entry 问题解决 - CSDN