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

news2024/10/7 7:23:09

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.LIST
     0 Fri Jun 30 20:25:38 CST 2023 META-INF/
    69 Fri Jun 30 20:25:38 CST 2023 META-INF/MANIFEST.MF
     0 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.html
   622 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/allclasses-noframe.html
  2846 Wed Jun 28 10:49:02 CST 2023 com/xiaoshan/ArraysDemo.java
     0 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.html
   762 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-frame.html
  4186 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-summary.html
  3885 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/com/xiaoshan/package-tree.html
  3509 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/constant-values.html
  3497 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/deprecated-list.html
  6738 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/help-doc.html
  4412 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/index-all.html
  2720 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/index.html
   551 Wed Jun 28 23:01:46 CST 2023 com/xiaoshan/MyClass.class
   178 Wed Jun 28 22:18:26 CST 2023 com/xiaoshan/MyClass.java
  3899 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/overview-tree.html
    14 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/package-list
  2451 Wed Jun 28 14:48:14 CST 2023 com/xiaoshan/RuntimeExample.java
   857 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/script.js
 13416 Thu Jun 29 22:31:44 CST 2023 com/xiaoshan/stylesheet.css
  2955 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.coloradmin.cn/o/704252.html

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

相关文章

Qt实现电子商城系统

用Qt实现的电子商城系统: 1.功能包括: 1)管理员账户 2)用户管理 3)用户登录 4)商品管理 5)商品出售 6)软件打包 2.商品包括:程序源码、开发教程和程序讲解;也可以根据需求进行功能更改 3.试用链接 链接:https://pan.…

华硕无畏14pro设置指纹登录

正常的流程如下 打开一个文件夹,在左侧找到此电脑,点击右键,找到属性 在搜索框中搜索:设置指纹登录 找到指纹识别,左键点击即可展开,点击:添加手指 点击:开始 输入PIN(开…

Oracle Linux 迷途知返

Oracle Linux 6.9 发布了。Oracle 已经宣布发布 Oracle Linux 6 发行版的更新了。 新版本 Oracle Linux 6 Update 9,包括多个已更新的内核,以及两个新的 "Unbreakable Enterprise Kernel" 包和一个 "Red Hat Compatible Kernel" 包…

SAP 后台配置之FM基金管理篇

SAP FM基金管理后台配置及应用 1 二话不说先上后台配置,能跑通为先1.1 基础设置1.1.1 维护财务管理区1.1.2 分配财务管理区1.1.3 激活全局基金管理功能1.1.4 定义全局参数1.1.5 定义编号区间编号并分配1.1.6 创建更改层次变式1.1.3 激活科目分配元素1.1.4 设置允许空…

3 款适合您手机或平板电脑的最佳 Android 和 iOS 修复工具

让我们面对现实:技术不可能总是完美的,您的智能手机也是如此,尽管更容易爱上它。毕竟,它只是一台机器! 无论您使用的是 Android 还是 iOS 系统的智能手机或平板电脑,当您第一次带回家时,它都能…

搭建帮助中心需要用到哪些工具

随着企业的发展和客户需求的增加,为了提供更好的客户支持和服务,许多企业决定搭建帮助中心。一个完善的帮助中心可以为客户提供详细的产品信息、常见问题解答和使用指南等,帮助他们快速解决问题并提高客户满意度。在本文中,我们将…

优秀的测试工程师养成记,庸碌四年的点工,“我“要进阶了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 怎么才能成为优秀…

运动耳机哪种戴着舒服、值得推荐的五款运动耳机

在运动中享受最佳声音和舒适感受。这些耳机不仅具备防汗、抗水、稳定舒适的特点,而且还拥有出色的音质和智能功能,帮助你充分释放潜能,突破自我。无论你是专业运动员还是热爱户外活动的人,这些运动耳机将成为你的最佳伙伴&#xf…

Spring AOP 源码探索 之 链式调用中的 ExposeInvocationInterceptor拦截器作用

文章目录 ExposeInvocationInterceptor 示例代码源码分析 extendAdvisorsmakeAdvisorChainAspectJCapableIfNecessary添加扩展拦截器的调用链作用示例总结相关学习路线 JAVA资深架构师成长路线->开源框架解读->Spring框架源码解读 ExposeInvocationInterceptor 从英文名字…

【Linux系列P5】gccg++与【动静态库】的美妙邂逅

前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎!本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读:YY的《…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件(散点坐标图.py)及其文件夹路径】 【步骤03】 【执行Pyi…

js使用replace保留两位小数,正则保留小数位,输入负数和小数正则自动校验

下面是方法,支持保留自定义小数位,这里使用的是截取,没有四舍五入,我的功能需求是只有两位小数的地方可以输入负数,所以只加在了num2的代码块里,如果你们需要所有数字都进行负号校验,可以吧if (isF)判断放在…

百度智驾,与车路协同说「再见」

作者 | 魏启扬 来源 | 洞见新研社 在经历了裁员,全员停发年终奖之后,百度对智能交通事业部(ACE)的治理还在继续。 不久前,有媒体爆料称,百度已经将智能交通事业部(ACE)从原来的智能…

smart Java——Netty实战(下):开发一个仿WeChat聊天工具SmartChat

文章目录 〇、代码逻辑一、搭建Server1.引入依赖2.搭建一个简单的Server 二、搭建WebSocket建立连接1.修改Server,增加一些支持2.自定义一个WebSocketHandler 三、功能实现——用户注册上线1.先定义一个工具类Result,用于封装服务端返回消息2.封装客户端…

easyX库图像处理相关函数(注释版)

0.图像处理相关函数与类型概览 您好,这里是limou3434,本次我将给您带来的是easyX的图像处理相关接口。 如果您感兴趣也可以看看我的其他内容。 函数或数据类型描述IMAGE保存图像的对象。loadimage读取图片文件。putimage在当前绘图设备上绘制指定图像…

高压线路距离保护程序逻辑原理(三)

阻抗元件的主要程序功能是阻抗计算,即第二章的解微分方程算法。配合低通数字滤波器计算出故障点至保护安装处的感受电抗X和电阻R值,再同整定值比较以确定是否在区内。阻抗元件也可以采用其他算法计算阻抗,但应指出上述哪种计算感受电抗和电阻…

如何去伪存真高效挖掘用户真实需求?2大模型

用户需求描述模糊,不清晰,往往对项目造成不可估量的风险:需求理解错误、新增需求、变更需求等问题,从而影响项目按时交付。 那么如何更准确地描述用户需求,就显得尤为重要。而可行性较强的模型主要有两种:5…

Django纪录操作之增删改查

一、单表 1、 添加记录 准备表 from django.db import modelsclass Book(models.Model):title models.CharField(max_length20)price models.DecimalField(max_digits65,decimal_places5)publish models.CharField(max_length30)pub_date models.DateTimeField(auto_now…

阿里云盘如何实现 大文件 秒上传?

文章目录 Intro极速上传的原因隐私保护 Intro 今天把几个软件上传到阿里云盘进行分享,文件大小将近1GB,按理说上传需要个2~3分钟吧。 之前上传一个压缩包看到上传速度大概是4~5MB/s。 但是我刚到别的软件看了一圈,回来发现文件居然已经上传…

网络攻防基础(复习)

文章目录 第 1 章 软件与系统安全概述第 2 章 扫描与防御技术2.1 扫描技术概述2.2 常见的扫描技术2.3 扫描工具2.4 扫描的防御 第 3 章 网络监听及防御技术3.1 网络监听概述3.2 监听技术3.3 监听的防御 第 4 章 口令破解与防御技术4.1 口令的历史与现状4.2 口令破解方式4.3 典型…