【Java可执行命令】(五)打包部署工具 jar:深入解析应用程序打包、分发和部署工具jar ~

Java可执行命令详解之jar

  • 1️⃣ 概念
  • 2️⃣ 优势和缺点
  • 3️⃣ 使用
    • 3.1 语法格式:创建jar文件
      • 3.1.1 参数:-cf
      • 3.1.2 参数:-tf
      • 3.1.3 参数:-i
      • 3.1.4 参数:-v
      • 3.1.5 参数:-e
    • 3.2 运行jar文件
  • 4️⃣ 应用场景
  • 5️⃣ 注意事项
  • 🌾 总结

在这里插入图片描述

1️⃣ 概念

Java的可执行命令程序jar(Java Archive)最早作为一项功能在JDK 1.0中引入。它的设计目的是为了方便在Java平台上进行打包、分发和部署应用程序jar文件可以将多个Java类、资源文件和其他依赖项打包成一个单独的归档文件,以实现更简单的应用程序管理和传输。

jar文件是一种归档文件格式,使用.jar扩展名,使用ZIP算法进行压缩。它类似于其他操作系统上的压缩文件(如.zip.tar.gz),但是专门用于存储Java程序。jar文件可以包含Java字节码文件、资源文件、配置文件、库文件等相关组件。

jar文件具有以下几个主要作用:

  • 打包:通过将多个.class文件和相关资源文件打包到一个jar文件中,方便分发和部署Java应用程序;
  • 压缩jar文件使用ZIP算法进行压缩,可以减小文件大小,加快传输和下载速度;
  • 依赖管理:将应用程序的依赖项打包在同一个jar文件中,简化应用程序的部署和配置过程。

2️⃣ 优势和缺点

优点

  • 简化部署:jar文件集成了Java应用程序所需的所有组件,使得部署变得更加简单和可靠;
  • 可移植性:jar文件可以在不同的操作系统上运行,无需做额外适配工作;
  • 安全性:jar文件可以使用数字签名进行验签,确保文件完整性并防止篡改。

缺点

  • 文件大小:由于jar文件需要包含所有相关资源,可能会导致文件较大;
  • 资源管理:如果依赖项的版本或配置发生变化,需要重新打包并传输更新的jar文件。

3️⃣ 使用

3.1 语法格式:创建jar文件

使用jar命令来创建一个jar文件时的完整命令格式如下:

jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

其中各项的含义如下:

  • {ctxui} :表示必填参数组,大括号内的内容是一组必需的参数,需要根据实际情况进行替换;
  • [vfmn0PMe]:表示可选参数,具体每一项参数的含义及作用在下文汇总归纳;
  • [jar-file]: 指定要创建或操作的 JAR 文件的名称;
  • [manifest-file]: 指定自定义清单文件的路径和名称。清单文件是一个特殊的文本文件,可以包含关于 JAR 文件的元数据信息,如版本号、作者、依赖项等;
  • [entry-point]: 指定 JAR 文件的可执行入口点(主类)。在运行可执行 JAR 文件时,指定的类将作为程序的起点;
  • -C dir: 在压缩或更新 JAR 文件中的文件时,该选项允许切换到指定的目录,并执行下一个参数所指向的操作;
  • files ...: 要包含在 JAR 文件中的文件列表。这些文件可以是 Java 类文件、资源文件、配置文件、库文件等。

jar命令支持许多可选参数来控制打包过程。汇总全部的可选参数如下表:

参数作用
-c创建新档案
-t列出档案目录
-x从档案中提取指定的 (或所有) 文件
-u更新现有档案
-v在标准输出中生成详细输出
-f指定档案文件名
-m包含指定清单文件中的清单信息
-n创建新档案后执行 Pack200 规范化
-e为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
-0仅存储; 不使用任何 ZIP 压缩
-P保留文件名中的前导 ‘/’ (绝对路径) 和 “…” (父目录) 组件
-M不创建条目的清单文件
-i为指定的 jar 文件生成索引信息
-C更改为指定的目录并包含以下文件。如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序与m’, ‘f’ 和 ‘e’ 标记的指定顺序相同

需要注意的是命令使用时,必须指定 {ctxu} 中的任一选项。下面主要介绍以下一些常用的 jar命令必选或可选参数:

  • -c:创建jar文件;
  • -t:列出jar文件内容;
  • -i:生成jar文件的索引信息;
  • -v:输出详细信息;
  • -f:指定jar文件名;
  • -e:设置可执行类(主类)的入口点。

3.1.1 参数:-cf

jar -cf 命令,用于创建 JAR(Java 归档)文件并指定jar文件名。JAR 文件是一种压缩文件格式,用来打包 Java 类、资源文件和其他相关文件。

下面是一个示例,演示如何使用 jar -cf 命令创建一个 JAR 文件:

假设有以下目录结构:

myapp/
└── com└── example├── Main.class└── utils├── Util1.class└── Util2.class

为了将这些文件打包成 JAR 文件,可以执行以下命令:

jar -cf myapp.jar  .

该命令的含义如下:

  • -cf:创建并指定要生成的归档文件的名称,这里是 myapp.jar
  • .:表示将当前目录及其子目录中的所有文件和目录添加到 JAR 文件。

执行完命令后,会生成一个名为 myapp.jar 的 JAR 文件,可以将该文件作为一个整体部署或与其他程序共享。

注意:打包时应该只包括编译后的 .class 文件。通常情况下,应该先编译 Java 源代码文件,然后再使用 jar -c 命令将编译后的 .class 文件打包成 JAR 文件。

查看生成的JAR 文件:

在这里插入图片描述

3.1.2 参数:-tf

jar -tf 用于查看 JAR 文件的内容列表。通过执行 jar -tf 命令,您可以快速查看 指定JAR 文件中包含哪些文件。

以下是使用 jar -tf 命令查看 JAR 文件内容的示例:

jar -tf myapp.jar

该命令的含义: -tf:显示归档文件 myapp.jar 中的文件列表。

执行命令后,将在终端或命令提示符窗口中显示类似如下的输出:

META-INF/
META-INF/MANIFEST.MF
com/
com/xiaoshan/
com/xiaoshan/allclasses-frame.html
com/xiaoshan/allclasses-noframe.html
com/xiaoshan/ArraysDemo.java
com/xiaoshan/com/
com/xiaoshan/com/xiaoshan/
com/xiaoshan/com/xiaoshan/MyClass.html
com/xiaoshan/com/xiaoshan/package-frame.html
com/xiaoshan/com/xiaoshan/package-summary.html
com/xiaoshan/com/xiaoshan/package-tree.html
com/xiaoshan/constant-values.html
com/xiaoshan/deprecated-list.html
com/xiaoshan/help-doc.html
com/xiaoshan/index-all.html
com/xiaoshan/index.html
com/xiaoshan/MyClass.class
com/xiaoshan/MyClass.java
com/xiaoshan/overview-tree.html
com/xiaoshan/package-list
com/xiaoshan/RuntimeExample.java
com/xiaoshan/script.js
com/xiaoshan/stylesheet.css
com/xiaoshan/SystemExample.java

输出显示了 myapp.jar 中包含的文件和目录的列表。在本示例中,JAR 文件中包括了 META-INF 目录、com/xiaoshan 目录,以及这些目录中的 .class 文件和 MANIFEST.MF 文件。

通过使用 jar -tf 命令,可以方便地浏览 JAR 文件的内容,以确保文件被正确地打包进了 JAR 文件中。

3.1.3 参数:-i

jar -i 命令用于显示或更新 JAR 文件的索引。JAR 文件索引是一个特殊文件,用于加快从 JAR 文件中获取类、资源和其他文件的速度。

以下是使用 jar -i 命令的示例:

执行以下命令来查看或更新其索引:

jar -i myapp.jar

执行命令后,将在终端或命令提示符窗口中显示类似如下的输出:

Indexing 22 files...

这表明正在对 JAR 文件中的文件进行索引。如果 JAR 文件之前没有索引,则创建索引。如果已存在索引,则会更新索引以反映 JAR 文件的最新内容。

JAR 文件索引使得在需要从 JAR 文件中获取文件时,可以更快地定位到所需的文件,提高了读取和加载文件的效率。

注意,使用 jar -i 命令来操作 JAR 文件索引通常是自动完成的,不需要手动执行此命令。只有在特定情况下,比如需要强制重新生成索引或需要手动检查索引的状态时,才需要使用此命令。

3.1.4 参数:-v

jar -v 命令用于在终端或命令提示符窗口中显示详细信息,包括 JAR 文件的版本、创建时间、压缩率等。

以下是使用 jar -v 命令的示例:

执行以下命令来查看其详细信息:

jar -tvf myapp.jar

该命令的含义:-tvf:显示归档文件 myapp.jar 的详细信息,并包括文件列表。

执行命令后,将在终端或命令提示符窗口中显示类似如下的输出:

    94 Fri Jun 30 20:36:06 CST 2023 META-INF/INDEX.LIST0 Fri Jun 30 20:25:38 CST 2023 META-INF/69 Fri Jun 30 20:25:38 CST 2023 META-INF/MANIFEST.MF0 Tue Jun 27 22:08:54 CST 2023 com/0 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/642 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/allclasses-frame.html622 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/allclasses-noframe.html2846 Wed Jun 28 10:49:02 CST 2023 com/xiaoshan/ArraysDemo.java0 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/0 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/8063 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/MyClass.html762 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-frame.html4186 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-summary.html3885 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-tree.html3509 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/constant-values.html3497 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/deprecated-list.html6738 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/help-doc.html4412 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/index-all.html2720 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/index.html551 Wed Jun 28 23:01:46 CST 2023 com/xiaoshan/MyClass.class178 Wed Jun 28 22:18:26 CST 2023 com/xiaoshan/MyClass.java3899 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/overview-tree.html14 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/package-list2451 Wed Jun 28 14:48:14 CST 2023 com/xiaoshan/RuntimeExample.java857 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/script.js13416 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/stylesheet.css2955 Wed Jun 28 16:57:30 CST 2023 com/xiaoshan/SystemExample.java

输出显示了 JAR 文件中包含的文件列表,并显示了每个文件的大小、创建时间以及相对路径。

通过使用 jar -v 命令,可以获得有关 JAR 文件的详细信息,包括文件大小、创建时间和路径等。这样可以帮助了解 JAR 文件的组成以及其中的文件属性。

3.1.5 参数:-e

jar -e 命令用于为可执行的 JAR 文件指定应用程序的入口点。以下是使用 jar -e 命令的示例:

假设我们有一个名为 myapp.jar 的 JAR 文件,并且有一个包含 MyClass 类的 Java 应用程序作为入口点。

可以使用 jar -e 命令将 MyClass 类指定为 JAR 文件的应用程序入口点:

jar -ef myapp.jar com.xiaoshan.MyClass

该命令的含义如下:

  • -ef:为 JAR 文件 myapp.jar 指定应用程序入口点;
  • com.xiaoshan.MyClass:指定应用程序的完全限定类名,即 MyClass 类所在的包路径和类名。

完成以上步骤后,myapp.jar 将会被配置为可执行的 JAR 文件,并且 MyClass 类中的 main 方法将被作为应用程序的入口点。可以使用 java -jar 命令运行该 JAR 文件:

java -jar myapp.jar

执行命令后,将会在终端或命令提示符窗口中显示 “Hello, World!”。

因此,使用 jar -e 命令可以为 JAR 文件指定一个特定的类作为应用程序的入口点。

3.2 运行jar文件

命令 java [-options] -jar jarfile [args...] 用于在 Java 环境中运行可执行的 JAR 文件,并可以提供附加选项和参数。

下面是该命令的各个部分含义的解释:

  • [-options]:选项是可选的,表示可以在此处提供其他 Java 运行时选项。例如,可以使用 -Xmx 选项设置堆内存的最大大小;
  • -jar:这是一个参数,表示后面将指定的文件是一个可执行的 JAR 文件;
  • jarfile:这是要执行的可执行 JAR 文件的名称;
  • [args...]:可选的参数列表,用于向该可执行 JAR 文件传递参数。

通过这个命令,可以执行一个 Java 应用程序,其中包含了预编译的代码和所有所需的依赖项。

Java 解释器(JRE/JDK)将会启动,加载指定的 JAR 文件,并查找 JAR 文件中定义的主类(一般来说是通过 Main-Class 属性指定的类),并运行它作为应用程序的入口点。

综上所述,命令 java [-options] -jar jarfile [args...] 提供了一种方便的方式来运行可执行的 JAR 文件,并且还可以通过选项和参数进行配置和自定义。

4️⃣ 应用场景

jar命令在以下几种常见情况下特别有用:

  1. 创建可执行的JAR文件:通过将Java类文件和资源文件打包到一个JAR文件中,可以方便地分发和执行Java应用程序。通过指定Main-Class属性,可以将一个类标记为JAR文件的入口点,使得它们可以直接运行;

  2. 导出库和依赖:可以使用jar命令将Java库或依赖打包成JAR文件,以便其他开发者可以轻松地将其添加到他们的项目中。这样可以简化项目的构建和部署过程,并提高代码的可重用性;

  3. 模块化开发和部署:通过使用jar命令创建模块化的JAR文件,可以将代码组织为逻辑上独立的模块。这样,开发者可以更容易地管理和更新代码,并解耦不同模块之间的依赖关系。

5️⃣ 注意事项

在使用jar命令时,请注意以下几点:

  1. 理解选项和参数jar命令提供了许多选项来控制打包过程,例如指定入口类、排除特定文件等。请查阅相关文档,了解每个选项的作用以及如何正确使用它们;

  2. 设置主类:对于可执行的JAR文件,需要使用-e选项来设置入口类(即Main-Class)。确保指定的类具有正确的main()方法,这将是应用程序的启动点;

  3. 处理依赖:如果应用程序依赖于其他库或JAR文件,请确保将它们包含在jar打包中,并在运行时正确配置依赖路径;

  4. 版本控制和重复性:始终注意版本控制,避免在同一个JAR文件中包含相同的类或资源文件。这可能导致意想不到的冲突和错误;

  5. 文件路径和编码:在打包过程中,确保提供的文件路径和编码是正确的,以免造成文件丢失或编码问题;

  6. 调试和测试:在打包之前,务必先通过适当的调试和测试来验证您的应用程序。确保在打包后的JAR文件中没有缺失或错误的代码。

🌾 总结

jar命令是Java开发过程中一个非常实用的工具,提供了打包、压缩和管理Java类文件和资源文件的功能。它为我们提供了方便的方式来创建可执行的JAR文件、导出库、打包资源以及模块化开发。然而,在使用jar命令时,我们需要理解选项和参数的含义,并遵循最佳实践,如设置正确的主类、处理依赖关系、版本控制等。

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

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

相关文章

fdisk和df -h的区别以及如何看懂和提取信息

前几天要查看linux系统磁盘大小,但是发现fdisk和df -h出来的大小和信息不一样,了解了一下linux的磁盘分区和内存大小,查阅了相关资料,总结以下信息: 一、相关理念 在计算机中,存放信息的主要存储设备就是…

c++摘花生

先看题目: Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘…

如何用 PowerPoint 制作滚动字幕

想知道如何使用 PowerPoint 制作滚动字幕吗?让您的演示更生动有趣!请紧跟以下教程,学习这个令人赞叹的技巧! 是不是你觉得自己制作的PPT过于呆板和无聊,而别人的PPT却充满了高级和趣味?原因在于你的PPT缺乏…

排序算法(1):冒泡排序

在计算机科学领域,排序算法是一个重要的主题。冒泡排序法是最基础且简单的排序算法之一,它的原理简单易懂,是学习排序算法的理想起点。本文将详细介绍冒泡排序法的原理、实现方法以及优化技巧,帮助读者全面了解和掌握这一经典算法…

打造品牌影响力:媒介易引领邀请明星录制祝福视频新潮流

在当今品牌推广的竞争激烈市场中,与体育冠军合作代言已成为众多品牌争相追求的新形式。体育冠军以其卓越的成就和广泛的影响力,成为品牌推广中的瞩目焦点。他们的形象和声音能够深入人心,激发消费者的共鸣,并对品牌产生积极的影响…

如何三分钟快速制作自定义ppt

目录 利用ChatGPTMindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果: 更好地提问ChatGPT_常用prompt表_小黄同学LL的博客-CSDN博客 举个栗子: 利用ChatGPTMindShow三分钟生成PPT 提词:…

自动生成的webservice客户端设置请求消息头信息

这里讲的头消息是指发送webservice请求的HTTP头信息(MIME 头信息),而不是SOAP报文里面的Header标签内容。 package example;import mypackage.GetOperInfoRequest; import mypackage.GetOperInfoResponse; import mypackage.Webservice11; i…

基于Alexnet网络实现猫狗数据集分类(Keras框架)

目录 1、作者介绍2、Alexnet网络2.1 网络介绍2.2 AlexNet网络的主要特点 3、基于Alexnet网络实现猫狗数据集分类3.1 猫狗大战数据集3.2 数据集处理3.3 准备工作3.4 训练过程3.5 对比实验3.5.1 HALCON平台下的Alexnet对比实验3.5.2 HALCON平台下的Resnet-50对比实验3.5.3 HALCON…

vue3怎么把路由的 # 去掉 ? 为什么用mode: ‘history‘没有生效?

代码完成后 请重启项目 一定要重启! 重启!重启! (没重启项目不生效) 1.找到项目中的路由文件 2.引用vueRouter // vue3 import { createRouter, createWebHistory } from "vue-router";var router crea…

蓝桥杯专题-试题版含答案-【荷兰国旗问题】【正三角形的外接圆面积】【比较字母大小】【车牌号】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

第三步:STM32F4时钟介绍

1.0 时钟系统框图 1.1 时钟系统知识 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。    ②、HSE是高速外部时钟,可接石英…

Learning C++ No.31 【线程库实战】

引言: 北京时间:2023/6/11/14:40,实训课中,实训场地有空调,除了凳子坐着不舒服之外,其它条件都挺好,主要是我带上了我自己的小键盘,并且教室可以充电,哈哈哈&#xff0c…