java中的JAR包

article/2025/9/22 22:49:13

 使用JAR文件 

JAR文件的全称是 Java Archive File,意思就是Java档案文件。通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常也被称为JAR包。JAR文件与ZIP文件的区别就是在JAR文件中默认包含了一个名为META-INF/MANIFEST.MF 的清单文件,这个清单文件是在生成JAR文件时由系统自动创建的。

当开发了一个应用程序后,这个应用程序包含了很多类,如果需要把这个应用程序提供给别人使用,通常会将这些类文件打包成一个JAR文件,把这个JAR文件提供给别人使用。只要别人在系统的CLASSPATH环境变量中添加这个JAR文件,则Java虚拟机就可以自动在内存中解压这个JAR包,把这个JAR文件当成一个路径,在这个路径中查找所需要的类或包层次对应的路径结构。

使用JAR文件有以下好处。

  • 安全。能够对JAR文件进行数字签名,只让能够识别数字签名的用户使用里面的东西。
  • 加快下载速度。在网上使用 Applet时,如果存在多个文件而不打包,为了能够把每个文件都下载到客户端,需要为每个文件单独建立一个HTTP连接,这是非常耗时的工作。将这些文件压缩成一个JAR包,只要建立一次HTTP连接就能够一次下载所有的文件。
  • 压缩。使文件变小,JAR的压缩机制和ZIP完全相同。
  • 包封装。能够让JAR包里面的文件依赖于统一版本的类文件。
  • 可移植性。JAR包作为内嵌在Java平台内部处理的标准,能够在各种平台上直接使用。

把一个JAR文件添加到系统的 CLASSPATH环境变量中后,Java将会把这个JAR文件当成一个路径来处理。实际上JAR文件就是一个路径,JAR文件通常使用jar命令压缩而成,当使用jar命令压缩生成JAR文件时,可以把一个或多个路径全部压缩成一个JAR文件。

例如,test目录下包含如下目录结构和文件。

 

 如果把上面test路径下的所有文件压缩成一个JAR文件,则JAR文件的内部目录结构为


jar命令详解

 jar 是随JDK自动安装的,在JDK安装目录下的bin目录中,Windows下文件名为 Jar.exe,Linux下文件名为jar。运行它需要用到JDK安装目录下lib目录中的 tools.jar文件,通常系统会自动加载tools.jar,无须显式设置。

如果在命令行窗口运行不带任何参数的jar命令,系统将会提示jar命令的用法。

C:\Users\yuanyu>jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:-c  创建新档案-t  列出档案目录-x  从档案中提取指定的 (或所有) 文件-u  更新现有档案-v  在标准输出中生成详细输出-f  指定档案文件名-m  包含指定清单文件中的清单信息-n  创建新档案后执行 Pack200 规范化-e  为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点-0  仅存储; 不使用任何 ZIP 压缩-P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件-M  不创建条目的清单文件-i  为指定的 jar 文件生成索引信息-C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并将 foo/ 目录中的所有文件归档到 'classes.jar' 中:jar cvfm classes.jar mymanifest -C foo/ .

 下面通过一些例子来说明jar命令的用法。

1.创建JAR文件:jar cf test.jar test

该命令没有显示压缩过程,执行结果是将当前路径下的 test 路径下的全部内容生成一个 test.Jar文件。如果当前目录中已经存在 test.Jar文件,那么该文件将被覆盖。

 2.创建JAR文件,并显示压缩过程:jar cvf test.jar test

该命令的结果与第1个命令相同,但是由于v参数的作用,显示出了打包过程,如下所示

 4.自定义清单文件内容:jar cvfm test.jar manifest.mf test

运行结果与第2个命令相似,显示信息也相同,其中 m 选项指定读取用户清单文件信息。因此在生成的JAR包中清单文件META-INF/MANIFEST.MF 的内容有所不同,它会在原有清单文件基础上增加 MANIFEST.MF 文件的内容。

当开发者向 MANIFEST.MF 清单文件中增加自己的内容时,就需要借助于自己的清单文件了,清单文件只是一个普通的文本文件,使用记事本编辑即可。清单文件的内容由如下格式的多个 key-value对组成。

key:<空格>value 

  清单文件的内容格式要求如下:

  • 每行只能定义一个 key-value对,每行的 key-value对之前不能有空格,即key-value对必须顶格写。
  • 每组key-value对之间以“: ”(英文冒号后紧跟一个英文空格)分隔,少写了冒号或者空格都是错误的。
  • 文件开头不能有空行。
  • 文件必须以一个空行结束

可以将上面文件保存在任意位置,以任意文件名存放。例如将上面文件保存在当前路径下,文件名为a.txt。使用如下命令即可将清单文件中的key-value对提取到 META-INF/MANIFEST.MF文件中。

jar cvfm test.jar a.txt test

5.查看JAR包内容:jar tf test.jar

在 test.jar 文件已经存在的前提下,使用此命令可以查看 test.jar 中的内容。例如,对使用第2个命令生成的 test.jar 执行此命令,结果如下:

 当JAR包中的文件路径和文件非常多时,直接执行该命令将无法看到包的全部内容(因为命令行窗口能显示的行数有限),此时可利用重定向将显示结果保存到文件中。例如,采用如下命令:

jar tf test.jar > a.txt

执行上面命令看不到任何输出,但命令执行结束后,将在当前路径下生成一个 a.txt 文件,该文件中保存了 test.Jar 包里文件的详细信息。

6.查看JAR包详细内容:jar tvf test.jar

该命令与第5个命令基本相似,但它更详细。所以除了显示第5个命令中显示的内容外,还包括包类文件的详细信息。例如:

 

7.解压缩:jar xf test.jar

将 test.jar文件解压缩到当前目录下,不显示任何信息。假设将第2个命令生成的 tes.Jar 解压缩,将看到如下目录结构:

 

8.带提示信息解压缩:jar xvf test.jar

解压缩效果与第7个命令相同,但系统会显示解压过程的详细信息。例如:

9.更新JAR文件:jar uf test.jar Hello.class

更新 test.jar中的 Hello.class文件。如果 test.jar 中已有 Hell.class 件,则使用新的 Hell.class文件替换原来的 Hell.class 文件;如果 test.jar 中没有 Hello.class文件,则把新的 Hello.class文件添加到test.jar文件中。

10.更新时显示详细信息:jar uvf test.jar Hello.class

这个命令与第9个命令相同,也用于更新 test.Jar文件中的 Hello.class文件,但它会显示详细的压缩信息。例如:

 


创建可执行的JAR包

 当一个应用程序开发成功后,大致有如下三种发布方式。

 

当用户单击上面的批处理文件时,系统将执行批处理文件的java命令,从而运行程序的主类。如果不想保留运行Java程序的命令行窗口,也可在批处理文件中定义如下命令:

 

  • 使用平台相关的编译器将整个应用编译成平台相关的可执行性文件。这种方式常常需要第三方编译器的支持,而且编译生成的可执行性文件丧失了跨平台特性,甚至可能有一定的性能下降。
  • 为应用编辑一个批处理文件。以 Windows操作系统为例,批处理文件中只需要定义如下命令:
  •  将一个应用程序制作成可执行的JAR包,通过JAR包来发布应用程序。

 把应用程序压缩成JAR包来发布是比较典型的做法,如果开发者把整个应用制作成一个可执行的JAR包交给用户,那么用户使用起来就方便了。在 Windows下安装JRE时,安装文件会将 *jar 文件映射成由 javaw.exe打开。对于一个可执行的JAR包,用户只需要双击它就可以运行程序了,和阅读 *chm 文档一样方便(*,chm文档默认是由hh.exe打开的)。下面介绍如何制作可执行的JAR包。

创建可执行的JAR包的关键在于:让 javaw 命令知道JAR包中哪个类是主类,javaw 命令可以通过运行该主类来运行程序。

jar命令有一个 -e 选项,该选项指定JAR包中作为程序入口的主类的类名。因此,制作一个可执行的JAR包只要增加 -e 选项即可。例如如下命令:

jar cvfe test.jar test.Test test

 上面命令把test目录下的所有文件都压缩到 test.jar 包中,并指定使用 test.Test 类(如果主类带包名,此处必须指定完整类名)作为程序的入口。

运行上面的JAR包有两种方式。

  1. 使用 java 命令,使用 java 运行时的语法是:java -jar test.jar
  2. 使用 javaw 命令,使用 javaw 运行时的语法是:javaw test.jar

当创建 JAR 包时,所有的类都必须放在与包结构对应的目录结构中,就像上面 -e 选项指定的Test类,表明入口类为Test。因此,必须在 JAR 包下包含 Test.class文件。


关于JAR包的技巧

介绍JAR文件时就已经说过,JAR文件实际上就是ZIP文件,所以可以使用一些常见的解压缩工具来解压缩JAR文件,如 Windows下的 WinRAR、WinZip等,以及 Linux下的 unzip等。使用 WinRAR和 WinZip等工具比使用JAR命令更加直观、方便;而使用 unzip则可通过 -d 选项来指定目标目录。

解压缩一个JAR文件时不能使用 jar 的 -C 选项来指定解压的目标目录,因为 -C 选项只在创建或者更新包时可用。如果需要将文件解压缩到指定目录下,则需要先将该JAR文件拷贝到目标目录下,再进行解压缩。如果使用 unzip,就无须这么麻烦了,只需要指定一个-d 选项即可。例如:

unzip test.jar -d dest/

 使用 WinRar则更加方便,它不仅可以解压缩JAR文件,而且便于浏览JAR文件的任意目录。图6.12显示了使用 WinRAR查看 test.jar 包的界面。

如果不喜欢jar命令的字符界面,也可以使用 WinRAR工具来创建JAR包。因为WinRAR工具创建压缩文件时不会自动添加清单文件,所以需要手动添加清单文件,即需要手动建立META-INF路径,并在该路径下建立一个 MANIFEST.MF 文件,该文件中至少需要如下两行:

上面的 MANIFEST.MF 文件是一个格式敏感的文件,该文件的格式要求与前面自定义清单的格式要求完全一样。

接下来选中需要被压缩的文件、文件夹和META-NF文件夹,单击右键弹出右键菜单,单击“添加到压缩文件(A)…”菜单项,将看到如图6.13所示的压缩界面。

 

按图 6.13 选择压缩成 ZIP 格式,并输入压缩后的文件名,然后单击“确定”按钮,即可生成一个JAR包,与使用jar命令生成的JAR包没有区别。

除此之外,Java还可能生成两种压缩包:WAR包和EAR包。其中WAR文件是 Web Archive File,它对应一个Web应用文档;而EAR文件就是 Enterprise Archive File,它对应于一个企业应用文档(通常由Web应用和EJB两个部分组成)。实际上,WAR包和EAR包的压缩格式及压缩方式与JAR包完全一样,只是改变了文件后缀而已。


http://chatgpt.dhexx.cn/article/mMwiVmWx.shtml

相关文章

什么是java包?java包作用是什么?

在Java中的包是一种封装一组类、子包和接口的机制,可用于组织一组相关的类和接口。那么具体什么是java包&#xff1f;java包作用是什么&#xff1f;本篇来简单解答下。 什么是java包&#xff1f; Java 包(package) package是一个为了方便管理组织java文件的目录结构&#xf…

Java 包(什么是包?)

包 概念导入包中的类静态导入将类放到包中基本规则操作步骤 包的访问权限控制常见的系统包 概念 包(package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性. 例如&#xff1a;你在代码中写了一个 Test 类. 然后你的舍友也可能写一个 Test 类. 如果出现两个同名的类,…

一、JAR包

一、JAR包 1、什么是jar包 **jar包就是 Java Archive File&#xff0c;顾名思义&#xff0c;它的应用是与 Java 息息相关的&#xff0c;是 Java 的一种文档格式&#xff0c;是一种与平台无关的文件格式&#xff0c;可将多个文件合成一个文件。**jar 包与 zip 包非常相似——准…

jar 包

文章目录 1.什么是 jar 包?2.怎么打 jar 包&#xff1f;2.1在 cmd 环境下打 jar 包2.2在 cmd 使用打的 jar 包方式一方式二 2.3补充&#xff1a;jar 包是可以直接运行的2.4在IDEA中打 jar 包2.5在IDEA中运行打好的 jar 包 3.补充&#xff1a;cmd环境变量相关命令 1.什么是 jar…

jar包是什么?

什么是jar包 JAR&#xff08;Java ARchive&#xff0c;Java 归档&#xff09;是一种与平台无关的文件格式&#xff0c;可将多个文件合成一个文件。用户可将多个 Java applet 及其所需组件&#xff08;.class 文件、图像和声音&#xff09;绑定到 JAR 文件中&#xff0c;而后作…

Jar包基础学习

一.什么是jar包 在软件领域&#xff0c;JAR文件&#xff08;Java归档&#xff0c;英语&#xff1a;Java Archive&#xff09;是一种软件包文件格式&#xff0c;通常用于聚合大量的Java类文件、相关的元数据和资源&#xff08;文本、图片等&#xff09;文件到一个文件&#xff…

jar包完全解读

本文抄自&#xff1a;jar包的一些事儿 前言&#xff1a; 作为java程序员&#xff0c;日常工作就是打jar包&#xff0c;可是对jar包的了解有多少呢&#xff1f; 一、什么是jar包 jar包就是 Java Archive File&#xff0c;顾名思义&#xff0c;它的应用是与 Java 息息相关的&…

Python-基于词典-中文分词算法

文章目录 三种分词算法比较逆向最大匹配从后往前扫描词典匹配 概率分词原理DAG计算大概率路径 封装 图论知识补充图的表示方法概率图模型贝叶斯网络 三种分词算法比较 dt {空调: 1, 调和: 1, 和风: 1, 风扇: 1,空: 1, 调: 1, 和: 2, 风: 1, 扇: 1} # 词典 max_len max(len(…

分词算法介绍

如有需要可以转载&#xff0c;但转载请注明出处&#xff0c;并保留这一块信息&#xff0c;谢谢合作&#xff01; 部分内容参考互联网,如有异议,请跟我联系! 作者:刀剑笑(Blog:http://blog.csdn.net/jyz3051) Email:jyz3051 at yahoo dot com dot cn(at请替换成&#xff…

为什么中文分词比英文分词更难?有哪些常用算法?(附代码)

导读&#xff1a;人类文明的重要标志之一是语言文字的诞生。数千年来&#xff0c;几乎人类所有知识的传播都是以语言和文字作为媒介。 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科。在人工智能的诸多范畴中&#xff0c;自然语言的理解以其复杂性、…

中文分词工具讨论

中文分词工具讨论 1 中文分词原理介绍 1.1 中文分词概述 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。 1.2 中文分词方法介绍 现有的分词方法可分为三大类&#xff1…

几种中文分词工具

word分词 word分词是一个Java实现的分布式的中文分词组件&#xff0c;提供了多种基于词典的分词算法&#xff0c;并利用ngram模型来消除歧义。能准确识别英文、数字&#xff0c;以及日期、时间等数量词&#xff0c;能识别人名、地名、组织机构名等未登录词。能通过自定义配置文…

NLP词法分析(一):中文分词技术

文分词介绍 中文分词相较于英文分词要难许多&#xff0c;因为英文本身就是由单词与空格组成的&#xff0c;而中文则是由独立的字组成的&#xff0c;但同时语义却是有词来表达的。因此对于中文的分析与研究&#xff0c;首先应寻找合适的方法进行分词。现有的中文分词技术主要分…

双向最大匹配算法——基于词典规则的中文分词(Java实现)

目录 前言 一、中文分词理论描述 二、算法描述 1、正向最大匹配算法 2、反向最大匹配算法 3、双剑合璧 三、案例描述 四、JAVA实现完整代码 五、组装UI 六、总结 前言 中文分词所需要的词典放在公众号&#xff0c;关注文章末尾的公众号&#xff0c;回复“字典”获取…

中文分词技术及应用

中文分词技术及应用中文分词算法有5大类&#xff1a; 1、 基于词典的方法 2、基于统计的方法 3、基于规则的方法 4、基于字标注的方法 5、基于人工智能的技术&#xff08;基于理解&#xff09;的方法 中文分词目前有4个瓶颈&#xff1a; 1、分词歧义 2、未登陆词识别 3、分词粒…

【NLP】为什么中文分词比英文分词更难?有哪些常用算法?(附代码)

导读&#xff1a;人类文明的重要标志之一是语言文字的诞生。数千年来&#xff0c;几乎人类所有知识的传播都是以语言和文字作为媒介。 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科。在人工智能的诸多范畴中&#xff0c;自然语言的理解以其复杂性、…

正向最大匹配中文分词算法

中文分词一直都是中文自然语言处理领域的基础研究。目前&#xff0c;网络上流行的很多中文分词软件都可以在付出较少的代价的同时&#xff0c;具备较高的正确率。而且不少中文分词软件支持Lucene扩展。但不管实现如何&#xff0c;目前而言的分词系统绝大多数都是基于中文词典的…

NLP|中文分词技术及应用

摘要:中文分词是中文信息处理的重要基础,本文详细阐述了目前主要的几种中文分词算法的技术原理 、中文分词目前的瓶颈和评价准则,以及中文分词的具体应用。 中文分词指将一个汉字序列切分成一个个单独的词。现有的中文分词算法有五大类:基于词典的方法,基于统计的方法,基…

入门科普:一文看懂NLP和中文分词算法(附代码举例)

导读&#xff1a;在人类社会中&#xff0c;语言扮演着重要的角色&#xff0c;语言是人类区别于其他动物的根本标志&#xff0c;没有语言&#xff0c;人类的思维无从谈起&#xff0c;沟通交流更是无源之水。 所谓“自然”乃是寓意自然进化形成&#xff0c;是为了区分一些人造语言…

中文分词算法—— 基于词典的方法

1、基于词典的方法&#xff08;字符串匹配&#xff0c;机械分词方法&#xff09; 定义:按照一定策略将待分析的汉字串与一个“大机器词典”中的词条进行匹配&#xff0c;若在词典中找到某个字符串&#xff0c;则匹配成功。 按照扫描方向的不同&#xff1a;正向匹配和逆向匹配…