在 Linux 中,您可以使用 jar 命令来对 jar 文件中的文件进行编辑。jar 命令是 Java Development Kit (JDK) 中的一部分,用于创建、查看和修改 jar 文件。
先看一下jar自带的帮助文档
─$ jar --help 127 ↵
用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
jar 创建类和资源的档案, 并且可以处理档案中的
单个类或资源或者从档案中还原单个类或资源。
示例:
# 创建包含两个类文件的名为 classes.jar 的档案:
jar --create --file classes.jar Foo.class Bar.class
# 使用现有的清单创建档案, 其中包含 foo/ 中的所有文件:
jar --create --file classes.jar --manifest mymanifest -C foo/ .
# 创建模块化 jar 档案, 其中模块描述符位于
# classes/module-info.class:
jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ classes resources
# 将现有的非模块化 jar 更新为模块化 jar:
jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ module-info.class
# 创建包含多个发行版的 jar, 并将一些文件放在 META-INF/versions/9 目录中:
jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes
要缩短或简化 jar 命令, 可以在单独的文本文件中指定参数,
并使用 @ 符号作为前缀将此文件传递给 jar 命令。
示例:
# 从文件 classes.list 读取附加选项和类文件列表
jar --create --file my.jar @classes.list
主操作模式:
-c, --create 创建档案。通过 -f 或 --file 指定的档案文件名
包含路径时,还将创建
缺少的父目录
-i, --generate-index=FILE 为指定的 jar 档案生成
索引信息
-t, --list 列出档案的目录
-u, --update 更新现有 jar 档案
-x, --extract 从档案中提取指定的 (或全部) 文件
-d, --describe-module 输出模块描述符或自动模块名称
--validate 验证 jar 档案的内容。此选项
将验证由多发行版 jar 档案导出
的 API 在所有不同的发行版本中
是否一致。
在任意模式下有效的操作修饰符:
-C DIR 更改为指定的目录并包含
以下文件
-f, --file=FILE 档案文件名。省略时, 基于操作
使用 stdin 或 stdout
--release VERSION 将下面的所有文件都放在
jar 的版本化目录中 (即 META-INF/versions/VERSION/)
-v, --verbose 在标准输出中生成详细输出
在创建和更新模式下有效的操作修饰符:
-e, --main-class=CLASSNAME 捆绑到模块化或可执行
jar 档案的独立应用程序
的应用程序入口点
-m, --manifest=FILE 包含指定清单文件中的
清单信息
-M, --no-manifest 不为条目创建清单文件
--module-version=VERSION 创建模块化 jar 或更新
非模块化 jar 时的模块版本
--hash-modules=PATTERN 计算和记录模块的散列,
这些模块按指定模式匹配并直接或
间接依赖于所创建的模块化 jar 或
所更新的非模块化 jar
-p, --module-path 模块被依赖对象的位置, 用于生成
散列
只在创建, 更新和生成索引模式下有效的操作修饰符:
-0, --no-compress 仅存储; 不使用 ZIP 压缩
--date=TIMESTAMP 具有可选时区的 ISO-8601 扩展偏移
日期时间格式的时间戳(用于条目的时间戳),
例如,"2022-02-12T12:30:00-05:00"
其他选项:
-?, -h, --help[:compat] 提供此帮助,也可以选择性地提供兼容性帮助
--help-extra 提供额外选项的帮助
--version 输出程序版本
如果模块描述符 'module-info.class' 位于指定目录的
根目录中, 或者位于 jar 档案本身的根目录中, 则
该档案是一个模块化 jar。以下操作只在创建模块化 jar,
或更新现有的非模块化 jar 时有效: '--module-version',
'--hash-modules' 和 '--module-path'。
如果为长选项提供了必需参数或可选参数, 则它们对于
任何对应的短选项也是必需或可选的。
cheat:jar
---
syntax: bash
tags: [ java ]
---
# To archive all files in the current directory into a jar file:
jar cf <file.jar> *
# To create a jar file using a pre-existing manifest file:
jar cfm <file.jar> <manifest_file> *
# To extract all files from a jar file in the current directory:
jar xf <file.jar>
# To extract only certain files from a jar file:
jar xf <file.jar> <file_to_extract>
# To list the content of a jar file:
jar tf <file.jar>
# To list the content of a jar file with verbose output:
jar tf <file.jar>
tldr:jar
# jar
# Java applications/libraries packager.
# More information: <https://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html>.
# Recursively archive all files in the current directory into a .jar file:
jar cf file.jar *
# Unzip .jar/.war file to the current directory:
jar -xvf file.jar
# List a .jar/.war file content:
jar tf path/to/file.jar
# List a .jar/.war file content with verbose output:
jar tvf path/to/file.jar
linux中,替换jar包中的文件,可以减少重新打包上传的时间,尤其是网速不好的时候。
根据文件名,查找出文件在jar包中的文件目录位置;
╰─$ jar -tvf dispatch-analysis-web-2.0.0.0.jar | grep FocusEnterpriseMapper.xml
> 651 Tue Jun 20 16:04:26 CST 2023 BOOT-INF/classes/com/ehl/utb/analysis/db/xml/FocusEnterpriseMapper.xml
将需要修改的文件,解压出来,并替换修改的文件;
jar -xvf dispatch-analysis-web-2.0.0.0.jar BOOT-INF/classes/com/ehl/utb/analysis/db/xml/FocusEnterpriseMapper.xml
解压完之后,在当前文件夹中,就会有对应的目录文件:
BOOT-INF/classes/com/ehl/utb/analysis/db/xml/FocusEnterpriseMapper.xml
根据上面的解压目录找到FocusEnterpriseMapper.xml,然后把我们需要更换的这个文件放进去,覆盖之前的文件即可。
之后开始把更新后的文件放入jar中。压缩修改完的文件;
╰─$ jar -uvf dispatch-analysis-web-2.0.0.0.jar BOOT-INF/classes/com/ehl/utb/analysis/db/xml/FocusEnterpriseMapper.xml
文件放入成功,这个时候,重启项目即可。
替换jar包中的jar文件时,前2个步骤同上,最后一步略有不同。
╰─$ jar -uvf0 abc.jar BOOT-INF/lib/a.jar
使用的是-uvf0而是不是-uvf文章来源:https://www.toymoban.com/news/detail-499568.html
参考:linux中对jar文件的操作,Linux如何修改jar里的文件,linux替换jar包文件文章来源地址https://www.toymoban.com/news/detail-499568.html
到了这里,关于jar命令:linux中对jar文件的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!