天天看点

【Java】使用javaassist修改jar包1 准备工具2 修改源码

由于工作需要,可能会涉及到一些需要对第三方的一些jar包与源码进行修改的情况,这个时候javaassist就可以派上用场。

javaassist是一个开源的编辑、修改、创建字节码的类库,它在jboos项目的aop框架中发挥了很大的作用。不过我们这次仅仅使用它的修改class的功能。

<a target="_blank" href="http://pan.baidu.com/s/1qxe1bgw">testjar.jar</a>

内部结构:

【Java】使用javaassist修改jar包1 准备工具2 修改源码

jdk1.6 1.7 1.8 均可

任何编辑器均可,本人使用的是intellij

javaassist的使用需要先将javaassist.jar导入到工程中,之后就可以直接在工程里使用里面的方法了。下面给出用javaassist修改外部jar包中testjar类的方法,并用反射测试了一下输出结果,最后将修改好的类输出到外部文件夹

如果没有问题的话,将会在外部文件生成一个新的testjar.class 文件,用jd-gui 查看该class可以看到里面的printtest方法已经被修改了

【Java】使用javaassist修改jar包1 准备工具2 修改源码
【Java】使用javaassist修改jar包1 准备工具2 修改源码

使用jdk自带的打包工具jar可以将class文件重新打包成jar文件

其给出了一些使用例子如下:

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中: 

       jar cvf classes.jar foo.class bar.class 

示例 2: 使用现有的清单文件 'mymanifest' 并

           将 foo/ 目录中的所有文件归档到 'classes.jar' 中: 

       jar cvfm classes.jar mymanifest -c foo/ .

所以,我们在使用的时候需要使用terminal进入到class所在到文件目录,使用命令:

在当前目录下打包生成newtestjar.jar文件。

该文件就是修改后的jar包,使用jd-gui打开查看可以看到源码已经被修改。

【Java】使用javaassist修改jar包1 准备工具2 修改源码