java打jar包

一、什么是jar包

JAR(Java ARchive,Java 存档)是一种与平台无关的文件格式,可将多个文件合成一个文件。JAR 文件格式以流行的 ZIP 文件格式为基础,JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。里面包含了该Jar包的版本、创建人、类搜索路径Class-Path等信息,如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口。
jar包主要是对java编译生成的class文件进行打包,所以是平台无关的, jar包是可跨平台的。除了.MF以及.class文件之外,jar还能打包静态资源文件如.html、.css以及.js等项目所需的一切,这也就意味着咱们能将自己的项目打成jar,即不管是web应用还是底层框架,都能打成jar包。

二、JAR 文件用处

当我们开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用,让jar包的调用看起来如黑盒。

  • 用于发布和使用类库
  • 作为应用程序和扩展的构建单元
  • 作为组件、applet 或者插件程序的部署单位
  • 用于打包与组件相关联的辅助资源

三、创建可执行 JAR

制作只含有字节码文件的jar包

  • 最简单的一个类的jar包
    1、写一个Hello.java的文件,Java文件中不要带上所在的包package那一行代码
    在这里插入图片描述
    2、用命令行进入到该目录下,编译这个文件成.class
    在这里插入图片描述
    在这里插入图片描述
    3、将编译后的Hello.class文件打成jar包
    在这里插入图片描述
    -c表示要创建一个新的jar包
    -v表示创建的过程中在控制台输出创建过程的一些信息
    -f表示给生成的jar包命名
    在这里插入图片描述
    4、运行jar包,需要添加Main-Class属性
    用压缩软件打开hello.jar,会发现里面多了一个META-INF文件夹,里面有MENIFEST.MF的文件,打开在第三行的位置写入 Main-Class: Hello (冒号后面有一个空格,整个文件最后有一行空行),保存运行 java -jar hello.jar ,此时成功在控制台看到 hello
    在这里插入图片描述
  • 含有多个类的jar,类之间存在调用关系
    1、用记事本写一个Hello.java和一个Tom.java的文件
public class Hello {
 
	public static void main(String[] args) {
		
		Tom.speak();
	}
}
public class Tom {
	
	public static void speak(){
		
		System.out.println("hello");
	}
}

2、编译: javac Hello.java

Hello.java和Tom.java同时被编译,因为Hello调用Tom,在编译Hello的过程中发现还需要编译Tom
在这里插入图片描述
3、、打成jar包
准备好上述的MANIFEST.MF文件,并存放在META-INF文件夹下,然后打jar包
在这里插入图片描述
在这里插入图片描述

该命令表示用第一个文件当做MENIFEST.MF文件,hello.jar作为名称,将Hello.class和Tom.class打成jar包。参数m,表示要定义MENIFEST文件
4、运行 java -jar hello.jar
在这里插入图片描述

  • 有目录结构的jar包
    1、 将Tom这个类放在com下
    在这里插入图片描述
    2、Tom.java需要在第一行声明自己的包名
    在这里插入图片描述
    3、Hello.java第一行进行import引入Tom这个类
    在这里插入图片描述
    4、编译Hello.java
    在这里插入图片描述
    在这里插入图片描述

5、准备好MENIFEST文件,打包jar包

jar -cvfm hello.jar META-INF\MANIFEST.MF Hello.class com

在这里插入图片描述
最后一个com表示把com这个文件夹下的所有文件都打进jar包
6、运行 java -jar hello.jar ,此时成功在控制台看到 hello
在这里插入图片描述
7、com包下有Tom.java源文件的,也被打进jar包,优化一下javac命令,使所有的编译后文件编译到另一个地方
在编译Hello.java时,先新建一个target文件夹
在这里插入图片描述

javac Hello.java -d target

将所有编译后的文件,都放到target文件夹下
在这里插入图片描述
将META-INF文件夹也复制到target目录下,进入这个目录
在这里插入图片描述

jar -cvfm hello.jar META-INF\MANIFEST.MF *

在这里插入图片描述
最后一个位置变成了*,表示把当前目录下所有文件都打在jar包里

  • 总结
    制作一个只含有class字节码文件的jar包
    javac 要编译的文件 -d 目标位置
    jar -cvfm 命名 MENIFEST文件 要打包的文件1 要打包的文件2

制作含有jar文件的jar包

  • 两个jar包间相互调用
    1、 生成tom.jar
    在这里插入图片描述
    2、 将Hello.java并将其编译成Hello.class,Hello里面引用了Tom类的方法,因此在打jar包时应使用-cp参数,将tom.jar包引入
javac -cp tom.jar Hello.java

在这里插入图片描述
-cp 表示 -classpath,指的是把tom.jar加入classpath路径下
3、将hello.class打成jar包

jar -cvfm hello.jar META-INF\MANIFEST.MF Hello.class

在这里插入图片描述
引入jar包需要在MENIFEST.MF文件中配置一个新属性:Class-Path,路径指向你需要的所有jar包,运行 java -jar
在这里插入图片描述

4、总结
引入多个jar包,中间用空格隔开
javac -cp xxx.jar 要编译的文件 -d 目标位置
jar -cvfm 命名 MENIFEST文件 要打包的文件1 要打包的文件2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值