jar

1. 简介

java中有jar命令,可以将一个或多个class文件,打包到一个指定的jar文件中(xxx.jar)

例如jre中的rt.jar,就是将src.zip中的Java文代码编译成class文件后,又将这些class文件打包到jar中

jar包可以被解压,解压后可以看到所有被打包进去的class文件。

class文件打开会是乱码,可以使用十六进制的方式进行打开得到类似下图的文件

core java中文版下载 java core包_jar包

上图中第一行的CA FE BA BE 表示当前class文件是java语言编译而成的,这玩意叫魔数,java代码编译成的class文件中,最前面一定是这个值(当然,其他语言编译成的class文件的魔数都不一样)
魔数后面的20 20 20 34表示的则是当前class文件是哪个版本JDK编译出来的。
16进制的34等于10进制的52,52则代表JDK1.8版本,51则是JDK1.7版本,以此类推

当然,要想查看文件对应的JDK版本可以通过DOS命令javap -verbose Hello.class进行查看

2. 自定义Jar

如何将自己的class文件打成jar包?

  1. 将当前目录中的Hello.class打到a.jar这个jar包中:
    jar -cvf a.jar Hello.class
  2. 将当前目录下的Hello.class以及World.class打到a.jar这个jar包中:
    jar -cvf a.jar Hello.class World.class
  3. 将当前目录下所有class文件打到a.jar中:
    jar -cvf a.jar *.class
  4. 把当前目录下的bin文件夹里面的所有文件打包,同时包含bin目录本身:
    jar -cvf a.jar bin
  5. 把当前目录下的bin文件夹中所有文件打包,同时不包含bin
    jar -cvf a.jar -C bin .

-C bin表示切换到bin目录下执行这个命令,注意要有bin后面的点(.)

-cvf:
c:意思是创建新的文件
v:意思是在标准输出中生成详细输出
f:意思是指定文件名

了解更多jar命令,直接在DOS下输入jar -help查看

3. 运行jar

java -jar a.jar

如果当前jar包中存放了多个class文件,则运行报错。因为这里没有指定那一个类中有程序的入口,这时需要修改jar中的配置

  1. 打开jar包,里面除了class文件还会有一个META-INF文件夹,再改文件夹下打开MANIFEST.MF文件,对该文件进行编辑
  2. 在该文件最底下添加Main-Class:全限定类名 该语句就是指定程序入口,这里必须是全限定类名,如果没有指定package的话直接是类名