一、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"