java class修改_【原创】Java基础之简单修改jar包中的class

当没有源代码或IDE时,如何在Linux环境下修改JAR包内的类文件?这篇博客详细介绍了从解压JAR、查看类结构、修改文件、编译到重新打包的全过程,涉及命令行工具如`unzip`、`javac`和`zip`的使用,以及处理依赖和classpath的方法。
摘要由CSDN通过智能技术生成

有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是:

1 进入lib目录

#cd lib#ls

test.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,

1cce8236e624b95ed73d977d4299d238.png

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

实际命令

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值