关于 jar包和 打jar包

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文件夹