1.什么是 jar包?
Java Archive File(Java档案[归档]文件)
jar文件是基于zip文件格式的压缩包,用于将多个class文件聚合一个文件
jar文件的本质就是一个 zip文件
jar文件 包含了 class文件和一个可选的META-INF目录
2.为什么 要打jar包?
jar文件 不仅仅是将 class文件或者资源文件 的简单打包,
常被用来做 应用程序(部署)和扩展模块(依赖包)
3.jar包 的内部结构?
//1.class文件path1/path2/*.class//2.META-INF目录 用于存储包和扩展配置数据,包括安全性、版本控制、扩展和服务META-INF(可选)META-INF/maven/相关META-INF/MANIFEST.MF//3.其他配置文件(按需配置)dbInfo.propertieshdfs-site.xmlhive-site.xmllog4j.properties
4.关于 MANIFEST.MF
1. 用途
jar的元数据配置文件,里面的配置信息可被被 jvm识别
2. 格式要求
key: value
注意: 冒号后的空格必须有,不然格式有错误(java.io.IOException: invalid header field)
不能有空白行
3. 常用配置项
Main-Class: One
Class-Path: /root/up
5.怎样用 jar 进行打jar 包?
5.1 关于 jar命令
功能:
制作jar包、解压jar、查看jar内容
语法:
jar -options [jar-file] [manifest-file] [-C dir] files ...
参数:
-c 创建新档案(打jar)
-t 列出档案目录(查询jar)
-x 从档案中提取指定的(或所有)文件 (解压jar包)
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-M 不创建条目的清单文件
-C 更改为指定的目录并包含以下文件
5.2 打jar包
示例1: 将当前目录下的 .class 文件进行打包
jar -cvf gc.jar *.class
-c 创建新档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
示例2: 将bin目录下的 所有文件进行打包
jar -cvf gc1.jar -C bin .
示例3: 将 自定义的 MANIFEST.MF 注入到 jar包的META-INF/MANIFEST.MF 中 (创建一个 可执行的 jar包)
1. 创建 mainfile
Main-Class: One
Class-Path: /root/up
2. 执行命令
jar -cvfm gc.jar mainfile *.class
3. 测试
java -jar gc.jar #可直接执行 jar
5.3 查看 jar 指定内容
jar -tf antlr-4.0-complete.jar
-f 指定档案文件名
-t 列出档案目录
5.4 解压jar 包
jar -xvf xxx.jar
-x 从档案中提取指定的(或所有)文件
-v 在标准输出中生成详细输出
-f 指定档案文件名
6.怎样是用 idea打 jar包?
https://www.cnblogs.com/bajiaotai/p/15378736.html
7.怎样是用 maven打 jar包?
参考:
https://blog.csdn.net/cnds123/article/details/115480190
Java 之使用 jar 命令打包
https://blog.csdn.net/Alecor/article/details/110622771?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-110622771-blog-118292710.t0_edu_mix&spm=1001.2101.3001.4242.4&utm_relevant_index=8
Jar包分析-META-INF文件夹