首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用Java的JAR文件

如何使用Java的JAR文件

作者头像
灬沙师弟
发布于 2023-03-07 00:56:24
发布于 2023-03-07 00:56:24
2.6K00
代码可运行
举报
文章被收录于专栏:Java面试教程Java面试教程
运行总次数:0
代码可运行

引言

hello,大家好,我是小面!今天有个小伙伴私信我说如何使用Java的Jar文件?今天将给大家介绍一下Java的jar文件。

在Java世界中,如果有任何大家都熟悉的文件格式,那就是JAR文件。JAR文件是一个归档文件或一组文件,作为一个具有.JAR文件扩展名的单元分发。归档就像将所有Java和其他资源文件放在一个单独的案例中,并准备将它们作为.jar文件(其他归档扩展名也存在)发布。本编程教程介绍了JAR文件格式背后的概念,并简要介绍了如何在Java中使用.JAR文件。

What is JAR?

JAR代表Java Archive。它是一种独立于平台的文件格式,专门用于将多个文件压缩和捆绑到一个称为JAR文件的归档文件中。所使用的压缩技术基于流行的ZIP文件格式。尽管JAR可以用作通用归档工具,但它的主要开发目的是在单个HTTP事务中下载浏览器中的文件集合。这是Java小程序流行时的场景,类、图像和声音文件作为HTTP请求下载并由浏览器托管。

在过去,它对性能产生了更好的影响,网页很快就对下载的小程序做出了响应。由于文件压缩被吸收到JAR文件中,它减少了文件大小,因此下载时间更短。另一个方面是,可以对每个JAR文件进行数字签名,以验证其来源。

使用JAR在Java中归档文件

JAR仍然是一种流行的文件归档格式,至少在Java领域是如此,它被广泛用于许多不同的目的。JAR文件的一些优点包括:

  • JAR文件是一种跨平台归档格式
  • JAR文件可以归档各种文件类型,无论是类、音频文件、图像还是基于文本的
  • JAR文件向后兼容
  • 几乎所有的开发人员都喜欢JAR文件,这使得它成为Java世界中大多数涉及归档文件的场景的明显选择

在典型的场景中,用Java开发的应用程序由许多源文件组成。编译后,将为每个公共类或接口创建对象代码或.class文件。这些文件在通过网络传输时,例如在HTTP协议请求中传输,每个文件传输都需要单独的套接字连接,可能非常大。例如,类文件的大小可能只有几百字节。因此,分别为每个文件进行每个套接字连接和断开连接所需的时间只是浪费时间。

现在考虑这个场景:所有文件都是JAR归档的,使用PKZIP算法压缩,并作为一个单元分发。此传输的性能将与我们之前的场景完全不同。这将显著提高应用程序的整体性能,因为JAR文件现在作为单个单元接收,然后可以根据接收端的程序要求将其解压缩为原始形式。这实际上是Java Applet时代存在JAR文件的经典原因。

Java应用程序中JAR文件的用例

Java小程序可能已经过时了,但它们的配套库仍然健在。JAR文件就是其中之一。将库打包在JAR归档文件中是很方便的,正如我们所看到的,大多数Java库都是打包在JAR文件中的。开发人员可以通过将所有类文件打包到一个归档文件中,以便于分发,从而制作一个fat-jar。然而,这是不鼓励的。相反,建议将一个更精简、更有凝聚力的文件编译成一个单独的归档文件。这种将文件分离为较小的关注单元的做法不仅利用了存储,而且还利用了库的一些小升级,从而使其他无关文件不受干扰。

什么是可执行JAR文件

程序员可以将可执行的Java程序与它使用的库、图像和其他文件一起打包到JAR文件中。开发人员可以简单地以单击并运行的方式执行JAR文件。可执行JAR文件保存了一个清单文件,指定了类路径和应用程序的入口点,它只是包含主方法的类:main class:App.MainClass。一些操作系统允许它在单击时运行;其他人使用简单的命令行调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ java -jar app.jar

如何在Java中创建JAR文件

Java开发工具包(JDK)提供了一个.jar工具,用于将Java代码打包成jar文件格式。从JDK9开始,JAR也得到了增强,可以使用模块,但在本教程中,我们将重点介绍使用JAR工具的基本功能。注意,一旦安装了JDK,程序员就可以使用JAR文件了。创建JAR文件的基本命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ jar cf jar-file input-file(s)

这里参数c表示我们希望创建一个JAR文件,而f表示我们希望输出到一个文件。现在,假设我们有三个文件:a.txt、b.class和c.jpg。如果我们想创建一个名为app的JAR文件,我们可以使用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jar cf app a.txt b.class c.jpg

使用此命令将创建一个演示app的jar文件。请注意,JAR文件实际上可以有任何扩展名,也可以没有扩展名。如果我们需要一个特定的.jar扩展名,我们可以按如下方式重写上述命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jar cf app.jar a.txt b.class c.jpg

一旦创建了JAR文件,输入文件就会被压缩,并且可以作为一个单元分发:在本例中是app.JAR。

如何查看JAR内容

现在,在创建JAR文件之后,我们可能需要查看JAR文件的内容。执行此操作的基本命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ jar tf app.jar

这显示了一个类似于以下内容的列表,取决于JAR中的文件名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
META-INF/
META-INF/MANIFEST.MF
a.txt
b.class
c.jpg

注意,除了我们归档的三个文件外,JAR文件还包含META-INF文件夹/目录中的MANIFEST.MF。这是由jar命令自动生成的。该文件包含一个名称-值对列表,用冒号分隔并分组为部分。

如果JAR文件只用于归档,那么这个文件没有多大用处。如果要将应用程序绑定到JAR文件中,则该文件必须包含Java虚拟机(JVM)运行程序的入口点。

入口点指的是包含主方法的类。用于下载的JAR文件包含文件列表及其类路径信息。我们创建的JAR文件非常基本,仅包含以下信息。MANIFEST.MF文件是一个简单的文本文件,可以由任何文本编辑器打开:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Manifest-Version: 1.0
Created-By: 19.0.1 (Oracle Corporation)

如何提取JAR文件

可以使用以下命令提取JAR文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ jar xf app.jar

当提取JAR工具时,它会在当前目录中创建文件的副本;原始JAR文件保持不变。提取将覆盖当前目录和路径名中具有相同名称的所有文件。

如何更新JAR文件

开发人员可以使用以下命令更新或向现有JAR文件添加新文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ jar uf app.jar d.class

在将新文件添加到现有存档中时应小心,因为存档中具有相同名称的任何文件都将被自动覆盖。

关于使用JavaJAR归档文件的最后思考

使用JAR工具时有很多可用选项。一个简单的jar –help命令可以快速概述这些参数。作为一名Java程序员,不可能没有直接或间接处理过JAR工具。

还有另一种名为WAR(Web Archive)的文件格式,用于捆绑Java Web应用程序和EAR(Enterprise Archive),用于归档由多个模块组成的企业应用程序。这些是JAR格式的特殊扩展,但与JAR不同,EAR和WAR文件不能作为独立应用程序运行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊一聊 JAR 文件和 MANIFEST.MF
在 JAVA 语言这个圈子里面摸爬滚打,除了对于语言层面和框架层面的学习之外,有一些东西它一直存在,但是确没有对它们有足够的重视,因为都觉得它是理所当然,比如 JAR 是个什么?
磊叔的技术博客
2025/06/07
1660
聊一聊 JAR 文件和 MANIFEST.MF
Java Jar包的压缩、解压使用指南
什么是jar包 JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。 如何打/解包 使用jdk/bin/jar.exe工具,配置完环境变量后直接使得jar命令即可。 jar命令格式 jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名... {ctxu},这四个参数必须选选其一。 [v f m e 0 M i],这几个是可选参数,文件名也是必须的。 参数说明-c创建一个jar包-t显示jar中的内容列表-
Java技术栈
2018/04/02
3.1K0
Java Jar包的压缩、解压使用指南
基于Java的打包jar、war、ear包的作用与区别详解
以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果。除jar以外对于J2EE来说还有war和ear。区别见下表:
wuweixiang
2018/08/14
2.5K0
Jpackage-制作无需预装Java环境的Jar可执行程序
JAR 包要在预装 JRE 环境的系统上执行。如果没有预先安装 JRE 环境,又想直接运行 Java 程序,该怎么办呢?
未读代码
2024/03/13
1K0
Jpackage-制作无需预装Java环境的Jar可执行程序
linux上对jar包的操作
vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。
用户7741497
2022/03/14
3K0
支持多JDK版本下运行的Jar文件打包方式
本文内容:在Java 9增强了JAR多版本字节码文件格式的支持,同一个Jar包可以包含多个Java版本的class文件。使用这个功能,我们可以将应用程序/库升级到新的Java版本,而不必强迫用户升级到相同的Java版本。
字母哥博客
2020/10/27
2.8K0
将引用了第三方jar包的Java项目打包成jar文件
什么是MANIFEST.MF:MANIFEST.MF描述Jar文件信息的说明文件;JAR文件中经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF;该文件包含主类以及加载类路径等信息;
JQ实验室
2022/10/08
9140
Java 核心类库一览
我们知道,在面向对象的程序设计里,一个类是可以调用另外一个类的方法,只要把被调用的那个类引入到 classpath 下就可以。
蜗牛互联网
2021/06/24
1.2K0
Java应用程序的打包和发布-Java快速入门教程
发布Java应用程序时Java提供了一系列打包和发布工具,可以显著的简化发布过程
jack.yang
2025/04/05
1200
Java的jar包和war包的异同
本质上,jar包是一个包含多个 .class 文件,Java库的和应用的资源文件的压缩包。
明明如月学长
2021/08/27
1.3K0
改变maven打包路径_Maven打包技巧「建议收藏」
“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包了,复杂点的例子是,它有自定义的格式,方便用户直接解压后就在命令行使用。作为一款”打包工具“,Maven自然有义务帮助用户创建各种各样的包,规范的JAR包和WAR包自然不再话下,略微复杂的自定义打包格式也必须支持,本文就介绍一些常用的打包案例以及相关的实现方式,除了前面提到的一些包以外,你还能看到如何生成源码包、Javadoc包、以及从命令行可直接运行的CLI包。
全栈程序员站长
2022/09/02
2.8K0
Java魔法堂:打包知识点之jar
一、前言                                    通过eclipse导出jar包十分方便快捷,但作为码农岂能满足GUI的便捷呢?所以一起来CLI吧! 二、JAR包                                 JAR包是基于ZIP文件格式,用于将多个.java文件和各种资源文件,或将多个.class和各种资源打包为一个文件。用于发布,部署,封装库、组件和插件程序,从而被编译器和JVM使用。 三、通过jar命令打包                        
^_^肥仔John
2018/01/18
1.2K0
Java魔法堂:打包知识点之jar
运行jar命令提示:没有主清单属性或者找不到或无法加载主类
文章如题:在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性。这是怎么回事?
浩Coding
2019/07/03
5.7K0
java项目导出为一个可执行文件jar包
对->export,选java在下面JAR file->next,选择要导出路径->next,finish。
全栈程序员站长
2022/07/06
7580
SpringBoot - 探究Spring Boot应用是如何通过java -jar 启动的
大家开发的基于Spring Boot 的应用 ,jar形式, 发布的时候,绝大部分都是使用java -jar 启动。 得益于Spring Boot 的封装 , 再也不用操心搭建tomcat等相关web容器le , 一切变得非常美好, 那SpringBoot是怎么做到的呢?
小小工匠
2021/08/17
1.7K0
SpringBoot - 探究Spring Boot应用是如何通过java -jar 启动的
浅谈 java 中构建可执行 jar 包的几种方式
        有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时, 你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了。但还有的 情况是,我们的 jar 包是要可执行的,即能直接在 cmd 下直接运行。前者的打包很简单,在 eclipse 中, 直接选中要打包的 java 文件和其它资源、依赖文件, export → Java → JAR file 即可。需要注意的是, 这种方式导出的 jar 包是
用户1177713
2018/02/24
4.1K0
浅谈 java 中构建可执行 jar 包的几种方式
java命令行执行 jar_java命令打包jar
这个技巧阐明了如何不直接处理清单文件而将一个不能运行jar包转换成一个可以执行的jar包。学会如何写一段转换jar包的程序,将你的jar包转换成你能使用java -jar 命令运行jar包或象在windows系统上那样通过双击来运行jar包。
全栈程序员站长
2022/11/09
1.8K0
linux学习(七) jar命令详解
JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包。当然也是有区别的,JAR包中有一个META-INF\MANIFEST.MF文件,当你找成JAR包时,它会自动生成。 JAR包是由JDK安装目录\bin\jar.exe命令生成的,当我们安装好JDK,设置好path路径,就可以正常使用jar.exe命令,它会用lib\tool.jar工具包中的类。这些细节就不用管它了。
Java架构师必看
2021/05/31
3.5K0
java -jar 启动程序/设置classpath
使用-jar选项(形如:java -jar xxx.jar )来运行一个可执行的jar包时,-jar会覆-cp的值。
全栈程序员站长
2022/09/05
3.3K0
项目打成Jar包和War包的介绍与区别
如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,这时可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。
全栈程序员站长
2022/08/31
7900
相关推荐
聊一聊 JAR 文件和 MANIFEST.MF
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档