Java可执行命令详解之jar
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
命令在以下几种常见情况下特别有用:
-
创建可执行的JAR文件:通过将Java类文件和资源文件打包到一个JAR文件中,可以方便地分发和执行Java应用程序。通过指定
Main-Class
属性,可以将一个类标记为JAR文件的入口点,使得它们可以直接运行; -
导出库和依赖:可以使用
jar
命令将Java库或依赖打包成JAR文件,以便其他开发者可以轻松地将其添加到他们的项目中。这样可以简化项目的构建和部署过程,并提高代码的可重用性; -
模块化开发和部署:通过使用
jar
命令创建模块化的JAR文件,可以将代码组织为逻辑上独立的模块。这样,开发者可以更容易地管理和更新代码,并解耦不同模块之间的依赖关系。
5️⃣ 注意事项
在使用jar
命令时,请注意以下几点:
-
理解选项和参数:
jar
命令提供了许多选项来控制打包过程,例如指定入口类、排除特定文件等。请查阅相关文档,了解每个选项的作用以及如何正确使用它们; -
设置主类:对于可执行的JAR文件,需要使用
-e
选项来设置入口类(即Main-Class
)。确保指定的类具有正确的main()
方法,这将是应用程序的启动点; -
处理依赖:如果应用程序依赖于其他库或JAR文件,请确保将它们包含在
jar
打包中,并在运行时正确配置依赖路径; -
版本控制和重复性:始终注意版本控制,避免在同一个JAR文件中包含相同的类或资源文件。这可能导致意想不到的冲突和错误;
-
文件路径和编码:在打包过程中,确保提供的文件路径和编码是正确的,以免造成文件丢失或编码问题;
-
调试和测试:在打包之前,务必先通过适当的调试和测试来验证您的应用程序。确保在打包后的JAR文件中没有缺失或错误的代码。
🌾 总结
jar
命令是Java开发过程中一个非常实用的工具,提供了打包、压缩和管理Java类文件和资源文件的功能。它为我们提供了方便的方式来创建可执行的JAR文件、导出库、打包资源以及模块化开发。然而,在使用jar
命令时,我们需要理解选项和参数的含义,并遵循最佳实践,如设置正确的主类、处理依赖关系、版本控制等。
今天的文章tar打包压缩命令_tar打包压缩命令分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84806.html