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

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

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

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

相关文章

从国内外IT人的差异谈如何破除35岁魔咒

本来想写篇关于DBA如何破除35岁魔咒的文章,但发现整个IT从业人员都面临着35岁魔咒,例如互联网的从业人员的平均年龄只有26岁。但国外同行的职业生命却长得多,这里我们通过分析一下国内外IT人的差异来探讨如何破除35岁魔咒。 我们和丑国的IT…

电脑端手机配置检测的安全性和隐私保护探讨

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时,是直接操作与外部引脚关联的内部寄存器,例如,当设置P2_1为0时,就是将外部引脚的P21引脚…

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

爬虫逆向实战(38)-某空气质量平台(反调试,AES,DES,MD5)

一、数据接口分析 主页地址:某空气质量平台 1、抓包 (1) 反调试 该网站对鼠标右击以及F12进行了监听并拦截 虽然该网站无法打开Chrome控制台,导致我们无法抓包,但是道高一尺魔高一丈。既然我们无法在打开该网站的时候打开Chrome控制台&…

Redis入门到实战-第二十二弹

Redis入门到实战 Redis高可用Sentinel官网地址Redis概述虚拟机配置在主从复制环境的基础上添加Sentinel更新计划 Redis高可用Sentinel 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一…

AI图像重绘解决方案

高质量的图像素材往往成本高昂且制作周期长,给企业带来了不小的困扰。美摄科技凭借其领先的AI图像重绘解决方案,为企业提供了一种高效、便捷且成本可控的图像优化途径,助力企业重塑视觉形象,引领市场新风尚。 美摄科技的AI图像重…

【跟着CHATGPT学习硬件外设 | 01】SPI外设

文章目录 🚀 概念揭秘关键精华🌟 秒懂案例生活类比实战演练 🔍 原理与工作流程探秘步骤1:初始化SPI接口步骤2:主设备启动通信步骤3:主设备发送数据步骤4:从设备接收数据步骤5:从设备…

【爬虫框架Scrapy】01 开启Scrapy之路

爬虫基础专栏:http://t.csdnimg.cn/r9gt9 前言 如果你没有爬虫基础,相信我,不要进行下去,没什么意义,你会撞的头破血流,最后破灭你那本就不多的兴趣选择放弃!!! OK&…

架构师之路--docker命令实践整理

安装docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine sudo yum install -y yum-utils sudo yum-config-manager --add-repo http://mirrors.aliyun.com/…

液体和固体介质的电气特性

本篇为本科课程《高电压工程基础》的笔记。 液体和固体介质广泛应用于高压电气设备内,作为设备的内绝缘。描述电介质的电气特性的四大参数是介电常数 ε \varepsilon ε、电导率 γ \gamma γ、介质损耗角正切 tan ⁡ δ \tan\delta tanδ和击穿场强 E b E_b Eb​。…

第十四届蓝桥杯JavaA组省赛真题 - 互质数的个数

解题思路: 快速幂 欧拉函数 快速幂比较常见于数据较大的取模场景,欧拉函数感觉还是有点抽象 注意: 取模的时候就不要简写了,例如:res res * a % mod;不要写成res * a % mod; import java.util.Scanner;public c…