JDK 命令之 jar -- 压缩/解压缩工具

文章目录

  • 一、命令介绍
  • 二、命令格式
  • 三、常用选项
  • 四、命令示例
    • (一)将指定目录打成 jar 包
    • (二)将指定目录打成 jar 包,且不生成文件 META-INF/MANIFEST.MF
    • (三)打包时指定文件 MANIFEST.MF
    • (四)查看 jar 包的内容
    • (五)对 jar 包进行解包
    • (六)将文件添加到已存在的 jar 包中
    • (七)切换到目录 hello 下然后再执行 jar 命令,相当于将目录 hello 下的内容打成 jar 包
    • (八)为 jar 包生成索引文件
    • (九)将 jar 包的内容列表输出到指定的文件中
  • 五、注意事项
  • 六、jar 文件包的一些技巧
    • (一)使用 unzip 来解压 jar 文件
    • (二)使用 Winzip 或者 WinRAR 等工具创建 jar 文件
    • (三)使用 jar 命令创建 zip 文件
  • 七、如何使用 jar 文件包

一、命令介绍

首先要明确的一点是 jar 包是压缩包,它可以使用 zip/unzip 命令解压,实际它是类 zip 的压缩文件。

jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将 tools.jar 放到环境变量 CLASSPATH 中。

jar 包中有一个文件 META-INF\MANIFEST.MF,当你生成 jar 包时,它会自动生成。

欲了解文件 META-INF\MANIFEST.MF 的详细内容,猛戳《Java 打 jar 包时,MANIFEST.MF 文件详解》

二、命令格式

命令格式:jar {c t x u f } [ v m e 0 M i ] [-C 目录] <文件名...>

其中 {c t x u} 这四个选项必须选其一。[v f m e 0 M i ] 则是可选项,文件名也是必须的。

三、常用选项

选项说明
-c创建一个 jar 包
-t显示 jar 中的内容列表
-x解压 jar 包,即展开 jar 文件包的指定文件或者所有文件
-u添加文件到 jar 包中,即更新已存在的 jar 文件包
-f指定jar包的文件名,通常这个选项是必须的
-v生成详细的报告并打印到标准输出
-m指定 MANIFEST.MF 文件,MANIFEST.MF 文件中可以对 jar 包及其中的内容作一些一设置
-M不产生 MANIFEST.MF ,此选项会忽略 -m 选项
-0只打包,不压缩,这样产生的 jar 文件包会比不用该选项产生的文件包的体积大,但速度更快
-i为指定的jar文件创建索引文件
-C表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令切换到该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 jar 文件包的时候可用
jar-文件指定需要生成、查看、更新或者解开的 jar 文件包,它是 -f 参数的附属参数
manifest-文件指定 MANIFEST.MF 文件,它是 -m 参数的附属参数
文件名...指定一个文件或者目录列表,这些文件或者目录就是要添加到 jar 文件包中的文件或者目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录及目录中的所有文件和子目录打入包中

四、命令示例

(一)将指定目录打成 jar 包

把目录 test 打包成 test.jar,并把 test.jar 放在当前目录下:

[root@linux ~]# jar -cf test.jar test
[root@linux ~]# jar cf test.jar test // 不要连接线"-",也行

把目录 test 打包成 test.jar,并把 test.jar 放在当前目录下,并显示打包信息:

[root@linux ~]# jar cvf test.jar test

(二)将指定目录打成 jar 包,且不生成文件 META-INF/MANIFEST.MF

使用了 M 选项,生成的 test.jar 中则不含有 META-INF/MANIFEST.MF 文件:

[root@linux ~]# jar cvfM test.jar test

(三)打包时指定文件 MANIFEST.MF

使用 m 选项指定了 manifest.mf 文件:

[root@linux ~]# jar cvfm test.jar manifest.mf test

(四)查看 jar 包的内容

使用 t 选项可以查看 test.jar 中的内容:

[root@linux ~]# jar tvf test.jar # 在 test.jar 

(五)对 jar 包进行解包

解开 test.jar 到当前目录:

[root@linux ~]# jar xf test.jar 

(六)将文件添加到已存在的 jar 包中

将 HelloWorld.java 添加到 hello.jar 包中:

[root@linux ~]# jar uf hello.jar HelloWorld.java 

在 test.jar 中添加了文件 manifest.mf,但是没有使用 -m 选项,所以此 manifest.mf 仅仅是一个普通文件。如果使用 -m 选项并指定 manifest.mf 文件,那么 manifest.mf 则作为清单文件来使用的:

[root@linux ~]# jar uf test.jar manifest.mf 

(七)切换到目录 hello 下然后再执行 jar 命令,相当于将目录 hello 下的内容打成 jar 包

[root@linux ~]# jar cvfm hello.jar mymanifest.mf -C hello/ 

(八)为 jar 包生成索引文件

使用选项 -i 会在 hello.jar 包的目录 META-INF 下生成一个名为 INDEX.LIST 的索引文件,它会生成一个列表,最上边为 jar 包名:

[root@linux ~]# jar i hello.jar 

(九)将 jar 包的内容列表输出到指定的文件中

如果你想查看一个 jar 文件包内容列表,而这个 jar 包又很大,屏幕信息会一闪而过,这时你可以把列表输出到一个文件中,方便查看:

[root@linux ~]# jar tvf hello.jar > hello.txt   

五、注意事项

假设目录结构如下:

hello|--- com|--- org

你只想把 com 目录和 org 目录打包,而这时 jar -cvf hello.jar hello/* 命令会连同 hello 目录也一块打包。这点大家要注意。jar 命令生成的压缩文件会包含它后边出现的目录。不要含有 hello 目录,我们应该进入到 hello 目录再执行 jar 命令。

注意:manifest.mf 这个文件名,用户可以任意指定名称,但 jar 命令只认识 manifest.mf,它会对用户指定的文件名进行相应在的转换,这不需用户担心。

六、jar 文件包的一些技巧

(一)使用 unzip 来解压 jar 文件

jar 文件实际上就是 zip 文件,所以可以使用常见的一些解压 zip 文件的工具来解压 jar 文件,如 Windows 下的 Winzip、WinRAR 等和 Linux 下的 unzip 等。使用 Winzip 和 WinRAR 等来解压是因为它们解压比较直观,方便。而使用 unzip,则是因为它解压时可以使用 -d 参数指定目标目录。

在解压一个 jar 文件的时候是不能使用 jar 的 -C 参数来指定解压的目标目录的,因为 -C 选项只在创建或者更新包的时候可用。那么需要将文件解压到某个指定目录下的时候就需要先将 jar 文件拷贝到目标目录下,再进行解压,比较麻烦。如果使用 unzip,就不需要这么麻烦了,只需要指定一个 -d 选项即可。

将指定的 jar 包解压到指定的目录下:

[root@linux ~]# unzip test.jar -d dest/

(二)使用 Winzip 或者 WinRAR 等工具创建 jar 文件

实际上 jar 文件就是包含了 meta-inf/manifest.mf 的 zip 文件,所以,只需要使用 Winzip、WinRAR 等工具创建所需要的 zip 压缩包,再往这个 zip 压缩包中添加 meta-inf/manifest.mf 文件即可。

(三)使用 jar 命令创建 zip 文件

使用带 -M 参数的 jar 命令创建一个 jar 文件包,将.jar 扩展名改为 .zip 扩展名,创建的就是一个不折不扣的 zip 文件包。

使用命令 jar 将指定目录打包成一个 zip 压缩包:

[root@linux ~]# jar cvfM test.zip test

说明:-M 参数表示制作 jar 包的时候不添加文件 META-INF/MANIFEST.MF

七、如何使用 jar 文件包

java 文件内容如下:

public final class Person {public static int getAge() {return 30;}
}

打开命令终端,编译和打包:

[root@linux ~]# javac Person.java # 编译源码文件
[root@linux ~]# jar cvf person.jar Person.class # 将字节码文件打包成 person.jar

再写一个类对其进行调用:

public class Test {public static void main(String[] args) {System.out.println(Person.getAge());}
}
[root@linux ~]# javac Test.java // 编译源代码文件
[root@linux ~]# java -classpath person.jar:. Test // 执行二进制文件 Test

说明:

  1. -classpath person.jar:. 是让 JVM 在当前目录下的 person.jar 或者当前目录下查找需要的 class 文件,多个路径之间使用冒号 : 分隔
  2. 使用选项 -classpath,系统只会在指定的类路径中查找 Test.class,而在执行类 Test 中的 main 方法时,需要引用类 Person.class,也只会在指定的类路径中查找
  3. person.jar 本身的路径也要明确,本例中的 person.jar 正好也在当前目录中,所以直接写 -classpath person.jar 就可以了,如果不在当前目录中,需要明确 jar 包的路径,假设 jar 包在当前目录下的子目录 test 中,则要写成 -classpath ./test/person.jar

如果 person.jar 和 Test.class 在同一个目录下,可以省略选项 -classpath,因为没有选项 -classpath 的情况下,JVM 默认是在当前工作目录中查找类文件:

[root@linux ~]# java Test;

如果这样写,则会报错:

[root@linux ~]# java -classpath person.jar Test; # 提示类 Test 找不到,因为你指定在文件包 person.jar 中搜索类文件,而 person.jar 文件包中并没有文件 Test.class

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高一计算机算法教案,高一信息技术第六章“第一节程序设计的基本方法”教案设计...

一、教学目标1&#xff0e;理解算法的概念&#xff1b;2&#xff0e;知道两种算法的描述方法—语言描述法和流程图的区别3&#xff0e;能初步利用算法解决简单的问题。4&#xff0e;培养学生的理论联系实际能力和动手操作能力。二、教学重难点1&#xff0e;重点&#xff1a;算法…

openshift安装_云幸福–如何在几分钟内安装新的OpenShift Container Platform 3.7

openshift安装此安装需要安装Red Hat Middleware产品流&#xff08;预配置的容器选项&#xff09;以及所有其他功能&#xff0c;例如源容器&#xff0c;映像容器和.Net Core容器。自OpenShift容器平台发布以来&#xff0c;我一直希望提供一个简单的方法。 &#xff0c;完全配置…

python 实现语音转文字_python3实现语音转文字(语音识别)和文字转语音(语音合成)...

话不多说&#xff0c;直接上代码运行截图1.语音合成------->执行&#xff1a;结果&#xff1a;输入要转换的内容&#xff0c;程序直接帮你把转换好的mp3文件输出(因为下一步–语音识别–需要.pcm格式的文件&#xff0c;程序自动执行格式转换&#xff0c;同时生成17k.pcm文件…

Linux 命令之 7z(7-zip) -- 压缩/解压文件

文章目录 一、命令介绍(一)主要特征1.使用 LZMA 算法2.支持多种格式(二)退出代码的含义(三)关于通配符(四)关于覆盖文件的提示回应二、命令格式三、常用子命令四、常用选项五、命令示例(一)测试压缩档案的完整性(二)将指定的压缩档解压到指定的目录下(三)列出指定…

简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

优秀程序员通过简单代码&#xff0c;窥探电脑编程中强大的数组操作功能。编程语言中&#xff0c;数组是一个非常重要的概念&#xff0c;也是一种很常用的类型。本文中通过javascript语言的代码实例&#xff0c;展现编程中数组的魅力。在javascript语言中&#xff0c;数组Array类…

java 示例_功能Java示例 第3部分–不要使用异常来控制流程

java 示例这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在前面的部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。…

Linux 命令之 gzip -- 压缩和解压文件

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;将指定目录下的每个文件压缩成 .gz 文件&#xff08;二&#xff09;解压指定目录下的每个压缩文件&#xff08;三&#xff09;显示指定目录下每个压缩文件的信息&#xff0c;并不解压&#xff08;四&am…

python读取tiff数据_opencv-python读取tiff影像,并展示

pencv-python可以读取各类图片&#xff0c;然后对图像进行处理&#xff0c;结合矩阵操作&#xff0c;可以非常方便的对图像进行各类操作&#xff0c;下面就展示一个简单的demo&#xff0c;用opencv-python读取图像并展示出来。Opencv的库安装可能比较麻烦一点。# 导入cv模块imp…

win7 计算机定时关机脚本,win7怎么定时关机?win7定时关机设置两种方法

当我们在操作电脑的时候&#xff0c;有时会有需要定时关机&#xff0c;或者不在电脑前操作是需要过段时间自动关机&#xff0c;但是Win7系统没有自带的定时关机软件&#xff0c;很多电脑用户又不喜欢安装第三方软件来完成该操作。那么win7怎么定时关机&#xff1f;本文为大家介…

Linux 命令之 gunzip -- 用来解压缩文件

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;解压文件&#xff0c;删除原文件&#xff08;二&#xff09;解压文件&#xff0c;并保留原文件&#xff08;三&#xff09;解压文件到其它目录下&#xff08;四&#xff09;指定后缀名来解压文件一、命…

java面试spring_针对Java程序员的二十大Spring REST面试问题答案

java面试spring大家好&#xff0c;过去两周来&#xff0c;我一直在与Spring教程共享一些REST&#xff0c;今天&#xff0c;我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST采访问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web Servic…

socket python实例_Python网络编程—第27课—Socket实例(0531)

一、创建套接字示例(服务端)import socket #导入模块import time #导入模块s socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建TCP套接字address (127.0.0.1, 8888)s.bind(address) #为TCP套接字绑定IP及端口s.listen(10) #启动TCP监听&#xff0c;同时接受10个sock…

Linux 命令之 bzip2 -- bz2文件的压缩程序

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;压缩指定文件&#xff08;二&#xff09;压缩指定目录下的文件&#xff08;三&#xff09;解压指定的文件一、命令介绍 Linux 系统中命令 bzip2 的英文是“bunzip2”&#xff0c;即.bz2 文件格式的压缩…

错误计算机怎么打开,电脑开机出错怎么回事

开机后出现这个错误&#xff0c;有没有大神教一下怎么办[Window Title]Error[Main Instruction]A JavaScript error occurred in the main process[Content]Uncaught Exception:Error: Unable to find a valid appat Object. (C:\Program Files (x86)\Thunder Network\Thunder\…

springboot jwt token前后端分离_「转」七个开源的 Spring Boot 前后端分离项目,建议收藏加转载...

其实前后端分离本身并不难&#xff0c;后段提供接口&#xff0c;前端做数据展示&#xff0c;关键是这种思想。很多人做惯了前后端不分的开发&#xff0c;在做前后端分离的时候&#xff0c;很容易带进来一些前后端不分时候的开发思路&#xff0c;结果做出来的产品不伦不类&#…

基于Spring Boot配置文件的日志记录示例样本

我们希望在Spring Boot中为不同的配置文件使用不同的日志记录配置&#xff0c;例如在本地运行中&#xff0c;我们只希望控制台日志记录和用于生产&#xff0c;我们希望文件记录日志支持每天滚动日志文件。 我想出了一个示例logback配置&#xff0c;该配置将在所有应用程序中使…

Linux 命令之 bunzip2 -- bz2 文件的解压缩程序

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;解压 .bz2 文件一、命令介绍 bunzip2 可解压缩 .bz2 格式的压缩文件。bunzip2 其实是 bzip2 的符号链接&#xff0c;即软链接&#xff0c;因此压缩解压都可以通过 bzip2 实现。执行bunzip2 与 bzip2 -…

联想办公计算机,办公娱乐两不误!联想这些笔记本电脑不容错过

【PConline 海选导购】随着技术的进步&#xff0c;如今的笔记本电脑性能越来越强&#xff0c;尤其是笔记本电脑携带更加方便&#xff0c;可以让你摆脱使用场景的限制&#xff0c;能随时随地畅玩游戏或者进行日常办公&#xff0c;有着台式机无可比拟的优势&#xff0c;因此&…

python email模块写邮件_python常用模块email----创建简单的文本邮件并发送

email模块可以方便的用来构造邮件&#xff0c;今天我们通过一个简单的例子来实现文本邮件的构造的发送。先将要发送的内容写在文件里面&#xff1a;cat /tmp/email_test.txthello there!i love python!编写如下脚本&#xff1a;cat test.py#!/usr/bin/python#codingutf-8import…

java私有属性和私有方法_Java接口–历年来Java 9之旅–默认方法和私有方法

java私有属性和私有方法介绍 Java接口已经比Java版本进行了更多的演变&#xff0c;而Java 8和Java 9则有所发展。在本文中&#xff0c;我们将介绍接口在Java 8之前的样子以及如何在Java 8和Java 9中得到增强。 Java 8之前的接口 接口将具有一个或多个抽象方法&#xff0c;如下…