有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是:
1 进入lib目录
# cd lib# lstest.jar dependency1.jar dependency2.jar
2 查看待修改jar包内类结构
$ unzip -l test.jaror$ vim test.jar
3 解压待修改jar包
$ mkdir test_dir$ unzip test.jar -d test_dir
4 查看class的jdk版本
$ vi -b test_dir/package/Class.class:%!xxd0000000: cafe babe 0000 0032 0123 0700 0201 0023 .......2.#.....#
取第15-16位,上例即32,
5 将要修改的文件放到class同目录下(如果没有源代码可以尝试反编译),并修改
$ vi test_dir/package/Class.java
6 收集classpath
由于jar包可能非常多,所以使用命令来生成
$ ls *.jar|sed ':a;N;$!ba;s/\n/:/g'test.jar:dependency1.jar:dependency2.jar
注linux下是:分隔,windows下是;分隔
7 编译
$ javac -helpUsage: javac
实际命令
$ javac -cp test.jar:dependency1.jar:dependency2.jar -source 1.6 -target 1.6 -sourcepath test_dir -d test_dir test_dir/package/Class.java
8 重新打jar包
$ cd test_dir$ zip -r test.jar ./*
9 删除临时目录和原始jar
$ cd ..$ cp test_dir/test.jar test.jar$ /bin/rm -rf test_dir
10 测试修改生效