如何使用Java的JAR文件

简介: 如何使用Java的JAR文件

引言

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。一些操作系统允许它在单击时运行;其他人使用简单的命令行调用:

$ java -jar app.jar

如何在Java中创建JAR文件

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

$ jar cf jar-file input-file(s)

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

jar cf app a.txt b.class c.jpg

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

jar cf app.jar a.txt b.class c.jpg

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

如何查看JAR内容

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

$ jar tf app.jar

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

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文件是一个简单的文本文件,可以由任何文本编辑器打开:

Manifest-Version: 1.0
Created-By: 19.0.1 (Oracle Corporation)

如何提取JAR文件

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

$ jar xf app.jar

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

如何更新JAR文件

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

$ jar uf app.jar d.class

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

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

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

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


相关文章
|
6天前
|
Java Unix Windows
|
10天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
46 3
|
1天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
12 0
|
2天前
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
|
2天前
|
运维 Dubbo Java
Serverless 应用引擎产品使用之在 Serverless 应用引擎中,查看镜像文件中的 JAR 文件如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
130 2
|
3天前
|
存储 缓存 安全
【专栏】如何在 Java 中创建临时文件?
【4月更文挑战第28天】本文介绍了Java中创建临时文件的两种方法:使用`File.createTempFile`和自定义创建。`File.createTempFile`能生成唯一文件名,但默认不自动删除;自定义创建则提供更大灵活性,但需手动管理。临时文件常用于数据缓存、文件上传下载和日志记录,使用时需注意文件清理、唯一性和权限设置。
|
3天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之阿里云Serverless函数计算中,在Node.js环境中执行jar文件如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
9 0
|
5天前
|
存储 前端开发 Java
Java实现文件分片上传
Java实现文件分片上传
8 0
|
8天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
31 1
|
10天前
|
Java 测试技术 持续交付
云效产品使用常见问题之通过流水线构建的java代码,在docker文件里拿到失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。