博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】Java基础之简单修改jar包中的class
阅读量:5355 次
发布时间:2019-06-15

本文共 2995 字,大约阅读时间需要 9 分钟。

有时需要修改很多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 
where 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 is doing -deprecation Output source locations where deprecated APIs are used -classpath
Specify where to find user class files and annotation processors -cp
Specify where to find user class files and annotation processors -sourcepath
Specify where to find input source files -bootclasspath
Override location of bootstrap class files -extdirs
Override location of installed extensions -endorseddirs
Override location of endorsed standards path -proc:{none,only} Control whether annotation processing and/or compilation is done. -processor
[,
,
...] Names of the annotation processors to run; bypasses default discovery process -processorpath
Specify where to find annotation processors -parameters Generate metadata for reflection on method parameters -d
Specify where to place generated class files -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 for implicitly referenced files -encoding
Specify character encoding used by source files -source
Provide source compatibility with specified release -target
Generate class files for specific VM version -profile
Check that API used is available in the specified profile -version Version information -help Print a synopsis of standard options -Akey[=value] Options to pass to annotation processors -X Print a synopsis of nonstandard options -J
Pass
directly to the runtime system -Werror Terminate compilation if warnings occur @
Read options and filenames from file

实际命令

$ 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 测试修改生效

 

转载于:https://www.cnblogs.com/barneywill/p/10552322.html

你可能感兴趣的文章
hive 语法 case when 语法
查看>>
Ajax:js读取txt内容(json格式内容)
查看>>
Task 7 买书最低价格问题
查看>>
Selenium3+python自动化007-警告框
查看>>
html5 相同形状的图形进行循环
查看>>
springboot中文官方文档
查看>>
lamdba表达式
查看>>
ThreadLocal实现线程范围内共享
查看>>
多校HDU5723 最小生成树+dfs回溯
查看>>
ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
查看>>
关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
查看>>
关于Entity Framework中的Attached报错的完美解决方案终极版
查看>>
Selenium之Web页面滚动条滚操作
查看>>
组合数据类型练习,英文词频统计实例上
查看>>
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
UIScrollView —— 缩放实现案例(二)
查看>>
【Qt】Qt Linguist介绍【转】
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>