如何学习创建和使用 Java 归档(JAR)文件

1. 简介

JAR(Java ARchive)文件是一种用于打包多个Java类、资源文件和元数据的压缩文件格式。它在Java开发和发布过程中扮演着重要角色。通过使用JAR文件,开发者可以将应用程序的所有组件打包在一个文件中,方便分发和部署。

2. JAR文件的基础知识
2.1 什么是JAR文件

JAR文件本质上是一个ZIP格式的压缩文件,包含Java类文件、资源文件(如图像、文本、配置文件)以及描述包内容的元数据(如清单文件)。JAR文件通常以“.jar”扩展名命名。

2.2 JAR文件的用途
  • 打包应用程序:将应用程序的所有组件打包在一个文件中,方便分发和部署。
  • 库文件:打包共享的Java类库,方便其他项目引用。
  • 封装资源:将应用程序所需的资源文件与类文件一起打包。
  • 存档:保存多个文件的历史版本或备份。
3. 创建JAR文件
3.1 使用jar工具

Java Development Kit(JDK)提供了jar命令行工具,用于创建、查看和管理JAR文件。

3.1.1 创建JAR文件

假设有一个简单的Java项目,包含以下文件:

/project/src/com/exampleMain.javaUtils.java/resourcesconfig.properties

编译Java源文件:

javac -d out src/com/example/*.java

创建JAR文件:

jar cvf myapp.jar -C out .

参数说明:

  • c:创建新的JAR文件。
  • v:生成详细输出。
  • f:指定输出JAR文件名。
  • -C:切换到指定目录,并包含该目录下的文件。
3.1.2 查看JAR文件内容
jar tf myapp.jar

参数说明:

  • t:列出JAR文件内容。
  • f:指定JAR文件名。
3.1.3 解压JAR文件
jar xvf myapp.jar

参数说明:

  • x:解压JAR文件。
  • v:生成详细输出。
  • f:指定JAR文件名。
3.2 使用IDE

现代集成开发环境(IDE),如Eclipse、IntelliJ IDEA,提供了图形化界面来创建JAR文件。以下以IntelliJ IDEA为例:

  1. 选择“File” > “Project Structure”。
  2. 在“Artifacts”选项卡中,点击“+”并选择“JAR”。
  3. 配置JAR文件内容和输出路径。
  4. 点击“OK”保存配置。
  5. 选择“Build” > “Build Artifacts” > “Build”创建JAR文件。
4. 使用JAR文件
4.1 运行JAR文件

JAR文件可以包含一个可执行的Java应用程序。为此,需要在JAR文件中包含一个特殊的清单文件(META-INF/MANIFEST.MF),指定应用程序的入口点。

创建清单文件MANIFEST.MF

Main-Class: com.example.Main

更新JAR文件,包含清单文件:

jar cvfm myapp.jar MANIFEST.MF -C out .

运行JAR文件:

java -jar myapp.jar
4.2 在项目中引用JAR文件

如果JAR文件是一个类库,可以在项目中引用它。

4.2.1 在命令行中引用

编译时引用:

javac -cp mylib.jar -d out src/com/example/*.java

运行时引用:

java -cp mylib.jar:out com.example.Main

注意:在Windows系统中,类路径分隔符使用分号(;)。

4.2.2 在IDE中引用

以IntelliJ IDEA为例:

  1. 右键点击项目根目录,选择“Open Module Settings”。
  2. 在“Libraries”选项卡中,点击“+”并选择“Java”。
  3. 选择JAR文件并添加到项目中。
  4. 配置依赖关系。
5. JAR文件的高级特性
5.1 多重JAR文件

在大型项目中,可能需要引用多个JAR文件。可以在命令行或IDE中指定多个JAR文件。

命令行中引用多个JAR文件:

java -cp lib1.jar:lib2.jar:out com.example.Main
5.2 签名和验证JAR文件

为了确保JAR文件的完整性和来源可信,可以对JAR文件进行签名。

5.2.1 生成密钥对

使用keytool生成密钥对:

keytool -genkey -alias mykey -keyalg RSA -keystore mykeystore.jks
5.2.2 签名JAR文件

使用jarsigner对JAR文件进行签名:

jarsigner -keystore mykeystore.jks myapp.jar mykey
5.2.3 验证签名
jarsigner -verify myapp.jar
5.3 压缩选项

在创建JAR文件时,可以指定不同的压缩选项以优化文件大小和性能。

例如,不压缩JAR文件:

jar cv0f myapp.jar -C out .
5.4 多重版本JAR文件

Java 9引入了多重版本JAR文件的概念,允许在同一个JAR文件中包含多个版本的类文件,以便在不同的Java版本下运行不同的代码。

创建多重版本JAR文件的结构:

/project/META-INF/versions/9com/example/NewClass.classcom/example/OldClass.class

打包JAR文件:

jar --create --file myapp.jar -C project .
6. JAR文件的问题排查

在使用JAR文件时,可能会遇到各种问题。以下是一些常见问题及其排查方法:

6.1 类路径问题

确保所有必要的JAR文件都在类路径中。使用-verbose:class选项可以查看类加载过程,帮助定位类路径问题。

6.2 清单文件问题

清单文件中的字段必须正确指定,尤其是Main-Class字段。如果运行JAR文件时遇到NoClassDefFoundError,检查清单文件是否正确配置。

6.3 签名问题

如果JAR文件签名不正确,运行时可能会抛出安全异常。使用jarsigner -verify命令验证签名。

6.4 版本兼容性问题

确保JAR文件中的类文件与目标JVM版本兼容。使用javap命令可以查看类文件的版本信息。

javap -verbose com.example.Main | grep "major version"
7. JAR文件的最佳实践
  • 分层打包:将应用程序按模块或功能分层打包,以便更好地管理和维护。
  • 清单文件:确保清单文件中正确配置了Main-Class和其他必要字段。
  • 依赖管理:使用依赖管理工具(如Maven、Gradle)来管理项目中的JAR文件依赖,避免手动处理依赖关系。
  • 版本控制:对JAR文件进行版本控制,确保不同版本的兼容性。
  • 签名和验证:对分发的JAR文件进行签名,确保文件的完整性和来源可信。

JAR文件是Java开发中不可或缺的一部分,提供了打包、分发和管理Java应用程序的便捷方式。通过深入理解JAR文件的创建和使用方法,开发者可以更高效地构建和维护Java项目。

同时,掌握高级特性和最佳实践,可以帮助开发者更好地应对复杂应用场景,提高应用的安全性和可靠性。

黑马程序员免费预约咨询

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

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

相关文章

世界森林覆盖率分布图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247680287&idx1&sn6ac57fa7472fc58cad1d5ab11b1d6b3b&chksmfa775e22cd00d7341e4f59d52221fb7f9a8e2d83602ab58719481af66b2f3b153c57f01c68bb&token808263816&langzh_CN&scene21#wec…

开源语音合成模型ChatTTS本地部署结合内网穿透实现远程访问

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章就教大家如何快速地在Windows中本地部署ChatTTS,并且我们还可以结合Cpolar内网穿透实现公网随时随地访问ChatTTS AI语言模型。 最像人声的AI来了&a…

Airflow任务流调度

0 前言 Airflow是Airbnb内部发起的一个工作流管理平台。使用Python编写实现的任务管理、调度、监控工作流平台。Airflow的调度依赖于crontab命令,与crontab相比,Airflow可以方便地查看任务的执行状况(执行是否成功、执行时间、执行依赖等&…

基于OCC+OSG的读取IGS模型显示其装配以及模型颜色

一般来说,读取STP模型会解析其装配结构,而读取IGS模型时候一般不这么做,因为IGS的每个部件大多是面片,而非一个实体模型,所以比如一些开源软件,比如Freecad等都是直接将模型作为一个整体并且在模型树上只显…

Elixir学习笔记——try, catch, and rescue

Elixir 有三种错误机制:errors, throws, and exits。在本章中,我们将探索每种机制,并说明何时应使用它们。 Errors 当代码中发生异常时,就会使用错误(或异常)。可以通过尝试将数字添加到原子来检索示例错…

生活好物:日常更精彩

我们的日用杂货店,是生活美学的聚集地。这里汇聚了各式各样的生活用品,每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店,仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆,到浴室的洗漱用品,再到客厅的…

6.17 作业

使用qt实现优化自己的登录界面 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确,则实现登录界面关闭,另一个应用界面显示。 第一个源文件 …

9.无代码爬虫软件做网页数据抓取流程——弹出窗口的移除

首先,多数情况下免费版本的功能,已经可以满足绝大多数采集需求,想了解八爪鱼采集器版本区别的详情,请访问这篇帖子: https://blog.csdn.net/cctv1123/article/details/139581468 八爪鱼采集器免费版和个人版、团队版下…

反射复习(java)

文章目录 反射机制的作用反射机制的原理加载机制详细解释 获取 Class 对象反射获取构造方法:获取 Class 对象里面 Constructor 对象反射获取成员变量:获取Class 对象里面的 Field 对象反射获取成员方法:获取 Class 对象里的 Method 对象其他常…

15.编写自动化测试(下)

标题 三、控制测试流程3.1 添加测试参数3.2 并行或连续运行测试3.3 显示函数输出3.4 指定/过滤测试用例名称3.5 忽略某些测试用例3.6 只运行被忽略的测试 四、测试的组织结构4.1 概念引入4.2 测试私有函数4.2 单元测试4.3 集成测试4.4 集成测试中的子模块4.5 二进制crate的集成…

Python脚本中使用 if 语句导致的错误代码

在 Python 脚本中使用 if 语句是一种常见的控制流程结构,用于根据条件决定程序的执行路径。当使用 Python 中的 if 语句时,可能会导致一些常见的错误。下面就是我经常遇到的错误代码示例及其可能的原因和解决方法,希望对大家有些帮助&#xf…

死锁预防之银行家算法

死锁预防之银行家算法 第一章 概述 Dijkstra提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位…

韩国职场新趋势:员工拒绝晋升,追求工作与生活的平衡

在当前职场环境中,晋升通常被视为职业生涯发展的重要里程碑。然而,据韩国《今日财经》报道,现代重工工会在今年的劳资谈判中提出了一个令人关注的要求——“拒绝晋升权”。这一要求反映了韩国职场的新趋势,即越来越多的员工对高薪…

长期保存红酒的挑战与应对策略

云仓酒庄雷盛红酒,以其卓着的品质和口感,赢得了无数葡萄酒爱好者的喜爱。然而,对于那些希望长期保存这些珍贵佳酿的人来说,如何确保红酒的品质和风味不受时间的影响,却是一项充满挑战的任务。 长期保存红酒的大挑战来自…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 火星字符串(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

电影《加菲猫家族》观后感

上周看了电影《加菲猫家族》,本片其中有很多明亮的画面,相关艳丽的色彩,充满温馨的场景,很符合加菲猫的一贯画风,即使反派出场时,带有阴暗的感觉,看起也不是特别吓人,比较欢乐气氛&a…

定时器介绍之8253芯片

目录 定时器简介 8253功能介绍 组成 工作原理 相关引脚 启动方法 计数方式 实现 读取计数值 定时器简介 8253功能介绍 内部结构 相关引脚 计数器组成 工作原理 启动方法 计数方式 初始化:写入控制字——>写入计数初值 实现 计数长度选择&#xff1a…

虚拟机Ping不通主机

1.问题描述 虚拟机IP: 192.168.3.133 主机ip:192.168.3.137 虚拟机Ping不通主机 主机可以ping通虚拟机 2.解决方案 设置桥接模式 控制面板找到网络和Internet设置 3.问题解决

geoserver 如何设置数据目录

在GeoServer中,数据目录是存储配置文件、数据存储、图层、样式等的重要目录。默认情况下,GeoServer的数据目录位于GeoServer安装目录下的data_dir文件夹。但在很多情况下,用户可能希望将数据目录设置在一个自定义位置,以便更好地管…

手持气象仪:科技与自然交汇的奇妙工具

TH-SQ5在广袤无垠的大自然中,天气总是瞬息万变,让人难以捉摸。然而,随着科技的进步,人类已经能够借助各种先进的仪器来预测和监测天气变化,其中,手持气象仪便是其中的佼佼者。 手持气象仪,顾名…