由于工作需要,可能会涉及到一些需要对第三方的一些jar包与源码进行修改的情况,这个时候javaassist就可以派上用场。
javaassist是一个开源的编辑、修改、创建字节码的类库,它在jboos项目的aop框架中发挥了很大的作用。不过我们这次仅仅使用它的修改class的功能。
<a target="_blank" href="http://pan.baidu.com/s/1qxe1bgw">testjar.jar</a>
内部结构:
jdk1.6 1.7 1.8 均可
任何编辑器均可,本人使用的是intellij
javaassist的使用需要先将javaassist.jar导入到工程中,之后就可以直接在工程里使用里面的方法了。下面给出用javaassist修改外部jar包中testjar类的方法,并用反射测试了一下输出结果,最后将修改好的类输出到外部文件夹
如果没有问题的话,将会在外部文件生成一个新的testjar.class 文件,用jd-gui 查看该class可以看到里面的printtest方法已经被修改了
使用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打开查看可以看到源码已经被修改。