Linux下如何读取嵌套Jar包内文件?用javap读取嵌套类文件
能否用javap读取嵌套Jar内的类文件?
可以实现,但javap本身不支持直接读取嵌套Jar(Jar-in-Jar)里的类文件,需要先把嵌套的Jar或目标类文件提取出来,再用javap处理。针对你给出的目录结构(A.jar/lib/B.jar/classes/a.class),可以按以下步骤操作:
方法一:分步提取后处理
第一步:从外层A.jar中提取嵌套的B.jar
使用jar命令将B.jar提取到当前目录:jar xf A.jar lib/B.jar执行后,当前目录会生成
lib/B.jar文件。第二步:读取B.jar中的a.class
有两种方式:- 提取a.class后直接分析
先从B.jar中提取a.class文件:
然后用javap分析这个类文件:jar xf lib/B.jar classes/a.classjavap classes/a.class - 直接通过类路径访问(需明确类的全限定名)
如果a.class的包名是classes(因为它在classes目录下),可以将B.jar加入类路径,直接指定类名:javap -cp lib/B.jar classes.a
- 提取a.class后直接分析
方法二:一次性管道处理(无需生成中间文件)
如果不想生成临时文件,可以用管道命令将类文件内容直接传递给javap:
jar xf A.jar lib/B.jar -O | jar xf - classes/a.class -O | javap -
解释:
- 第一个
jar命令将A.jar中的lib/B.jar输出到标准输出(-O参数表示不生成目录结构) - 第二个
jar命令从标准输入读取B.jar内容,提取出classes/a.class并输出到标准输出 - 最后javap读取标准输入的类文件内容进行分析
内容的提问来源于stack exchange,提问作者hsseol
相关产品推荐
相关产品推荐

