java class修改_【原创】Java基础之简单修改jar包中的class
有時(shí)需要修改很多jar(假設(shè)這些jar都位于lib目錄)中其中一個(gè)jar中的某一個(gè)類,而且又沒有原始代碼或ide,這時(shí)最簡(jiǎn)單的方式是:
1 進(jìn)入lib目錄
#cd lib#ls
test.jar dependency1.jar dependency2.jar
2 查看待修改jar包內(nèi)類結(jié)構(gòu)
$ 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 -help
Usage: javacwhere possible options include:-g Generate all debugging info-g:none Generate no debugging info-g:{lines,vars,source} Generate only some debugging info-nowarn Generate no warnings-verbose Output messages about what the compiler isdoing-deprecation Output source locations where deprecated APIs are used-classpath Specify where to find user class files andannotation processors-cp Specify where to find user class files andannotation processors-sourcepath Specify where to find input source files-bootclasspath Override location of bootstrap classfiles-extdirs Override location of installed extensions-endorseddirs Override location of endorsed standards path-proc:{none,only} Control whether annotation processing and/or compilation isdone.-processor [,,...] Names of the annotation processors to run; bypasses default discovery process-processorpath Specify where to find annotation processors-parameters Generate metadata forreflection on method parameters-d Specify where to place generated classfiles-s Specify where to place generated source files-h Specify where to place generated native header files-implicit:{none,class} Specify whether or not to generate class files forimplicitly referenced files-encoding Specify character encoding used by source files-source Provide source compatibility with specified release-target Generate class files forspecific VM version-profile Check that API used is available inthe specified profile-version Version information-help Print a synopsis of standard options-Akey[=value] Options to passto annotation processors-X Print a synopsis of nonstandard options-J Pass directly to the runtime system-Werror Terminate compilation ifwarnings occur
@ Read options and filenames from file
實(shí)際命令
$ 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 刪除臨時(shí)目錄和原始jar
$ cd ..
$ cp test_dir/test.jar test.jar
$/bin/rm -rf test_dir
10 測(cè)試修改生效
總結(jié)
以上是生活随笔為你收集整理的java class修改_【原创】Java基础之简单修改jar包中的class的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 遍历对象_java中some(
- 下一篇: java static修饰方法_浅析Ja