修改第三方jar包并重新打包

发布时间 2024-01-06 21:07:40作者: PilgrimHui

背景

在使用nebula-java 2.5.0客户端时,Session类没有获取SessionId的方法,且变量是private的

使用层面无法拿到这个SessionId,不利于和服务端联调。

这个SessionId在3.x版本是有方法获取了,但目前公司内部都是2.0的nebula,不兼容

考虑在Session类中增加一个对外获取SessionId的接口,这种小改动可以直接修改jar包,重新打包放到maven仓库中使用即可

以下简要总结方法,有其它修改需求可以仿造。

方法

考虑修改第三方jar包后重新打包的一个流程

1、解压jar包和jar源文件包(要新建文件夹在里面解压)

jar xvf ../client-2.5.0-source.jar 
jar xvf ../client-2.5.0.jar

2、找到jar里面要修改的对应java源文件,比如Session.java,修改部分代码。

3、然后要重新把源文件编译成class,编译时要注入依赖,classpath指定为原编译jar包解压后的文件夹;这里还要补充缺少的jar包文件夹,windows时把冒号改成分号

javac -classpath client-2.5.0:slf4j-api-1.7.10 Session.java

4 编译后得到Session.class,替换掉第1步解压的jar包文件夹里的Session.class

5 到第1步解压的jar文件夹里打包 jar cf client-2.5.0.jar *

6 注意第5步如果在外面打包,检测不到里面的META-INF,会生成一个META-INF(这个清单也不对,可能跟原jar包的不兼容,比如原jar包有maven依赖pom)。用cfM中M表示不生成清单文件,但是在外面打包回导致目录结构会在外面增加一层,可能会导致无法使用,需要注意目录结构的一致性。

7 由于配置的不同,之后idea中ctrl点进去查看代码时可能出现Library source does not match the bytecode for class Session。可以对client-2.5.0-source.jar做类似修改即可。或者无视,因为不影响使用,但是要知道二者的不一致。