一、jar将多个文件合并为单个 JAR 归档文件,基于 ZIP 和 ZLIB 压缩格式。jar 的主要目的是便于将 java applet或应用程序打包成单个归档文件。将 applet 或应用程序的组件( .class 文件、图像和声音)合并成单个归档文件时,可以用 java 代理(如浏览器)在一次 HTTP 事务处理过程中 对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar 还能压缩文件,从而进一步缩短了下载时间。此外,它允许 applet 的作者对文件中的各个项进行签名,从而可认证其来源。
jar 工具的语法基本上与 tar 命令的语法相同。
1)将文件 foo.class 添加到现有的 JAR 文件 foo.jar 中
jar -uf foo.jar foo.class, u:通过添加文件或更改清单来更新现有的 JAR 文件
2)用 manifest 中的信息更新 foo.jar 的清单
jar umf manifest foo.jar
3)解压jar包中指定的某个文件
jar xvf test3.jar META-INF/MANIFEST.MF
4)列出归档目录及文件
jar tvf wass-biz-core-1.0.jar
5)打包可执行文件
1、准备Manifest文件a.txt,文件内容:
Manifest-Version: 1.0 Created-By: 1.6.0_15 (Sun Microsystems Inc.)
Main-Class:<空格>+Hello <回车换行>
2、jar cvfm b.jar a.txt Hello.class
3、java -jar b.jar
二、javap:方便的反编译工具,不能将字节码还原为java文件,只能编译出数据区、方法、类引用、vm指令等,不过在线上环境还是能起到快速定位问题的作用
Usage: javap <options> <classes> where possible options include: -help --help -? Print this usage message -version Version information -v -verbose Print additional information -l Print line number and local variable tables -public Show only public classes and members -protected Show protected/public classes and members -package Show package/protected/public classes and members (default) -p -private Show all classes and members -c Disassemble the code -s Print internal type signatures -sysinfo Show system info (path, size, date, MD5 hash) of class being processed -constants Show static final constants -classpath <path> Specify where to find user class files -bootclasspath <path> Override location of bootstrap class files
no options:列出-package对应的成员变量、方法,不带vm指令
D:\java_tools\ws\hello\bin>javap javap.test.Hello Compiled from "Hello.java" public class javap.test.Hello { public static final java.lang.String NAME; protected java.lang.String AGE; java.lang.String Loc; public javap.test.Hello(); public static void main(java.lang.String[]); }
-p:所有类及成员变量
Compiled from "Hello.java" public class javap.test.Hello { public static final java.lang.String NAME; protected java.lang.String AGE; private java.lang.String sex; ...
-s:输出变量类型
public static void main(java.lang.String[]); Signature: ([Ljava/lang/String;)V Code: 0: return
-c:反编译
D:\java_tools\ws\hello\bin>javap -c javap.test.Hello Compiled from "Hello.java" public class javap.test.Hello { public static final java.lang.String NAME; protected java.lang.String AGE; public javap.test.Hello(); Code: 0: aload_0 1: invokespecial #15 // Method java/lang/Object."<init>":()V 4: aload_0 5: ldc #17 // String age 7: putfield #19 // Field AGE:Ljava/lang/String; 10: aload_0 11: ldc #21 // String sex 13: putfield #22 // Field sex:Ljava/lang/String; 16: return public static void main(java.lang.String[]); Code: 0: return }
-sysinfo:显示系统级信息
Classfile /D:/java_tools/ws/hello/bin/javap/test/Hello.class Last modified 2014-1-4; size 534 bytes MD5 checksum beeebc871db00762f00025ed72d742b2 Compiled from "Hello.java"