java 溯本求源之基础(八)之 jar(下篇)

        上篇中我们介绍了 Java 类加载顺序、JAR 命令的使用以及 MANIFEST.MF 文件的作用。Java 类加载顺序包括 Bootstrap classes、Extension classes 和 Class Path。JAR 命令是一个归档和压缩工具,用于打包 Java 应用程序。MANIFEST.MF 文件存储打包文件的元信息,如主类、版本号和依赖路径。了解这些知识点对于 Java 开发和应用程序打包至关重要。本篇主要介绍jar命令的使用,以及一些注意事项。

1.jar的自定义参数

1.1 -f

        这个参数很简单,就是指定文件名称的

1.2 -m
参数主要是设置manifest.mf的值的,对文件中的值走新增或者更新。
1.3 -M

        在打包或者更新的时候指定不创建manifest.mf。

1.4 -n

        在创建(c)一个JAR文件时,该选项将对归档文件进行规范化,使其内容不受pack200(1)命令的打包和解包操作的影响。如果没有这种规范化,已签名JAR的签名可能会失效。

1.5 -v

        生成标准输出的详细输出

1.6 -0 这个是数字0

        创建或者更新jar的时候不使用zip压缩

1.7 -C

        这个 jar 命令用于更新(u)一个现有的 JAR 文件 my.jar,并添加或更新其中的一些文件。

-C 选项用于在添加文件到 JAR 文件之前临时改变当前工作目录。这对于在不创建与目录结构相对应的额外层次结构的情况下,将特定目录中的文件添加到 JAR 文件中非常有用。

具体来说:

  • jar uf my.jar -C classes Bar.class:这个命令会临时切换到 classes 目录,然后将 Bar.class 文件添加到 my.jar 中。添加完成后,会切换回原来的工作目录。

  • jar uf my.jar -C classes . -C bin Xyz.class:这个命令会执行以下操作:

    • 首先,临时切换到 classes 目录,然后将该目录中的所有文件(由 . 表示)添加到 my.jar 中,但不会在 JAR 文件中创建 classes 目录。

    • 然后,切换回原来的工作目录。

    • 接着,临时切换到 bin 目录,然后将 Xyz.class 文件添加到 my.jar 中。

最终,如果 classes 目录中包含 bar1bar2 文件,my.jar 文件将包含以下内容:

% jar tf my.jar META-INF/ META-INF/MANIFEST.MF bar1 bar2 Xyz.class

        这意味着 bar1bar2Xyz.class 文件已被添加到 my.jar 中,且它们在 JAR 文件中的路径不会包含原始的目录结构(即没有 classesbin 目录)。

1.8 -J*option*

        设置指定的JVM选项,以便在JRE运行JAR文件时使用,例如,-J-Xms48m将启动内存设置为48mb。

2.Operands

        这里是针对上篇中的使用方法的补充。

2.1 file

        在创建(c)或更新(u)一个JAR文件时,文件操作数定义了应该添加到存档中的文件或目录的路径和名称。在提取(x)或列出JAR文件的内容(t)时,文件操作数定义要提取或列出的文件的路径和名称。必须指定至少一个有效的文件或目录。用空格分隔多个文件操作数。如果使用了入口点、jarfile或manifest操作数,则必须在它们之后指定文件操作数。

2.2 entrypoint

        在创建(c)或更新(u) JAR文件时,入口点操作数定义了类的名称,该类应该作为绑定到可执行JAR文件中的独立Java应用程序的入口点。如果存在e选项,则必须指定入口点操作数。

2.3 jarfile

        定义要创建(c),更新(u),提取(x)或查看(t)的文件的名称。如果存在f选项,则必须指定jarfile操作数。省略f选项和jarfile操作数将指示jar命令从标准输入(对于x和t)接受jar文件名,或者将jar文件发送到标准输出(对于c和u)。

        当索引(i)一个JAR文件时,指定不带f选项的jarfile操作数。

2.4 manifest

当创建(c)或更新(u)一个JAR文件时,manifest操作数用manifest中包含的属性的名称和值定义预先存在的manifest文件。JAR文件中的MF。如果存在f选项,则必须指定清单操作数。

2.5 @arg-file
    为了缩短或简化jar命令,我们可以在单独的文本文件中指定参数,并将其传递给jar命令,并使用@作为前缀。当jar命令遇到以@符号开头的参数时,它将该文件的内容扩展到参数列表中。

        参数文件可以包含jar命令的选项和参数(-J选项除外,因为它们被传递给启动器,而启动器不支持参数文件)。文件中的参数可以用空格或换行符分隔。参数文件中的文件名相对于运行jar命令的当前目录,而不是相对于参数文件的位置。通配符(如星号(*))可能会被操作系统shell展开,但不会被展开。

        下面的示例展示了如何创建一个类。用find命令从当前目录输出的文件名列出文件:

        find .-name '*.class' -print > classes.list ​ 然后可以执行jar命令并传递类。使用@arg-file语法将文件列表到它:

Jar cf my.jar @classes.list 参数文件可以用路径指定,但参数文件中任何具有相对路径的文件名都是相对于jar命令的当前工作目录的,而不是相对于传入的路径,例如:

jar @dir / classes.list

        好了 这个命令本次就介绍到这里了,到此为止 我们已经介绍了四个命令了,但是还是需要我们记住,不要被技术限制住,不要因为技术而技术,工具都是为了方便我们提高我们的效率。另外笔者想说,为什么其他作者都是介绍一些高大上的东西,而在我这里都是一些我们不去太关注的细节,主要还是这些确实我们不一定用上,但是我希望大家在被某些问题困住的时候,能够在这里提供一些思路,最后过段时间也会更新其他东西,像是一些常见的东西我这边都会更新,为的就是帮助刚入行的人能够灵活的应对各种困难。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式图床项目

一、图床架构分析 二、后台数据处理框架 秒传: 如果上传的文件已经在服务器中存在了,就不需要二次上传了,但是服务器会对这个文件的引用计数加一,这样服务器就知道这个文件是多个人持有的。先对上传的文件进行 md5 校验来判断服务器中已经存在相同的文件了(同样的文件拿到…

【面经八股】搜广推方向:面试记录(十一)

【面经&八股】搜广推方向:面试记录(十一) 文章目录 【面经&八股】搜广推方向:面试记录(十一)1. 自我介绍2. 实习经历问答4. 编程题5. 反问1. 自我介绍 。。。。。。 2. 实习经历问答 就是对自己实习事情要足够的清晰,不熟的不要写在简历上!!! 其中,有个 …

flink: 将接收到的tcp文本流写入HBase

一、依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

Redis(一) redis配置 | 如何连接redis服务器 | 基本数据类型 | 基本全局命令

文章目录 前言Redis 配置文件连接 redis 服务器Redis 常见数据类型Redis 基本全局命令set 和 get 命令KEYS 命令EXISTS 命令DEL 命令EXPIRE 和 TTL 命令Redis 过期策略定时器和时间轮的方式实现过期key的及时删除 TYPE 命令 前言 本篇文章将介绍我们在 Linux 环境下安装了 Red…

bizcharts中LineChart时间戳使用moment转化出现Invalid Date

文章目录 一、前言1.1、问题1.2、解决 二、bizcharts三、moment.js四、在线源码五、最后 一、前言 1.1、问题 最近在使用bizcharts绘制折线图LineChart的时候&#xff0c;发现X轴的时间显示成了Invalid Date。如下图所示&#xff1a; 发现是后端返回了时间戳字符串"1572…

增强现实(AR)的开发工具

增强现实&#xff08;AR&#xff09;的开发工具涵盖了一系列的软件和平台&#xff0c;它们可以帮助开发者创造出能够将虚拟内容融入现实世界的应用程序。以下是一些在AR领域内广泛使用的开发工具。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

计算机网络——30SDN控制平面

SDN控制平面 SDN架构 数据平面交换机 快速、简单&#xff0c;商业化交换设备采用硬件实现通用转发功能流表被控制器计算和安装基于南向API&#xff0c;SDN控制器访问基于流的交换机 定义了哪些可以被控制哪些不能 也定义了和控制器的协议 SDN控制器&#xff08;网络OS&#…

Java JSON字符串相关问题

一、依赖包 <!--json包--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.15</version></dependency> 二、举例 1.实体对象转Json字符串 1.1 代码实现 Dog.java: pack…

软考102-上午题-【信息安全】-杂题+小结

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a;

天空卫士SASE 2.0:赋能您的数智安全

在这个以数据为核心的时代&#xff0c;企业的安全防线正面临着空前的挑战。随着对网络安全和数字化协作的需求不断攀升&#xff0c;企业如何在确保数据安全的前提下&#xff0c;维持业务的高效运转&#xff0c;成为了一个亟待解决的问题。企业管理者亟需一种集网络安全、云服务…

Netty核心原理剖析与RPC实践21-25

Netty核心原理剖析与RPC实践21-25 21 技巧篇&#xff1a;延迟任务处理神器之时间轮 HahedWheelTimer Netty 中有很多场景依赖定时任务实现&#xff0c;比较典型的有客户端连接的超时控制、通信双方连接的心跳检测等场景。在学习 Netty Reactor 线程模型时&#xff0c;我们知道…

docker中配置交互式的JupyterLab环境的问题

【报错1】 Could not determine jupyter lab build status without nodejs 【解决措施】安装nodejs(利用conda进行安装/从官网下载进行安装&#xff09; 1、conda安装 conda install -c anaconda nodejs 安装后出现其他报错&#xff1a;Please install nodejs 5 and npm bef…

人工智能|推荐系统——搜索引擎广告

原文题目 Dark sides of artificial intelligence: The dangers of automated decision-making in search engine advertising(JASIST,2023) 人工智能的阴暗面:搜索引擎广告自动决策的危险 摘要 随着人工智能应用的日益广泛,搜索引擎供应商越来越多地要求广告商使用基于机…

JavaScript练手小技巧:仿米哈游官网人物跟随鼠标位移效果

最近&#xff0c;有同学找到我&#xff0c;说&#xff1a;老师&#xff0c;我想模仿米哈游官网。 我说&#xff1a;可以&#xff0c;很不错的。 她说&#xff1a;有些效果有点难&#xff0c;能不能帮我看下。 于是&#xff0c;我就简单大概粗糙的讲解了下大致的原理&#xf…

车载以太网AVB交换机 gptp透明时钟 8口 千兆/百兆可切换 SW1100TE

SW1100TE车载以太网交换机 一、产品简要分析 8端口千兆和百兆混合车载以太网交换机&#xff0c;其中包含2个通道的1000BASE-T1和5通道100BASE-T1泰科MATEnet接口引出,1个通道1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道交换&#xff0c;车载以太网网…

卷积神经网络(CNN)基础知识整理

卷积神经网络&#xff08;CNN&#xff09;基础知识整理 0写在前面 这两天陆续看了一些关于卷积神经网络的视频和博文&#xff0c;把我觉得比较有用的知识和内容梳理一下&#xff0c;理顺逻辑&#xff0c;自己也可加深理解&#xff0c;写在这里&#xff0c;日后想看&#xff0…

探索直播美颜技术:计算机视觉在美颜SDK开发中的应用

下文&#xff0c;小编将深入探讨美颜技术在计算机视觉领域中的应用&#xff0c;特别是美颜SDK的开发过程&#xff0c;并剖析其技术原理和实现方法。 一、美颜技术的发展 这些算法往往难以满足用户对高质量美颜效果的需求&#xff0c;因此需要更加先进的技术手段来实现。 二、…

git基本操作(小白入门快速上手一)

1、前言 我们接上一篇文章来讲&#xff0c;直接开干 1.1、工作区 1. 工作区很好理解&#xff0c;就是我们能看到的工作目录&#xff0c;就是本地的文件夹。 2. 这些本地的文件夹我们要通过 git add 命令先将他们添加到暂存区中。 3. git commit 命令则可以将暂存区中的文件提交…

基于.NET Core开发的轻量级分布式配置中心

前言 今天给大家推荐一个基于.NET Core开发的轻量级分布式配置中心&#xff1a;AgileConfig。 AgileConfig官方介绍 AgileConfig秉承轻量化的特点&#xff0c;部署简单、配置简单、使用简单、学习简单&#xff0c;它只提取了必要的一些功能&#xff0c;并没有像Apollo那样复…

大数据集成平台技术解决方案

1.1.系统概述 1.1.1需求描述 1.1.2.需求分析 1.1.3.重难点分析 1.1.4.重难点解决措施 1.2.系统架构设计 1.2.1.系统架构图 1.2.2.关键技术 软件开发全套资料包获取&#xff1a;软件项目开发全套文档下载_软件开发文档下载-CSDN博客 直接下载方式&#xff1a;本文末个人名片。