在 Linux 中,您可以使用 jar 命令來對 jar 文件中的文件進行編輯。jar 命令是 Java Development Kit (JDK) 中的一部分,用于創(chuàng)建、查看和修改 jar 文件。
先看一下jar自帶的幫助文檔
─$ jar --help 127 ?
用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
jar 創(chuàng)建類和資源的檔案, 并且可以處理檔案中的
單個類或資源或者從檔案中還原單個類或資源。
示例:
# 創(chuàng)建包含兩個類文件的名為 classes.jar 的檔案:
jar --create --file classes.jar Foo.class Bar.class
# 使用現(xiàn)有的清單創(chuàng)建檔案, 其中包含 foo/ 中的所有文件:
jar --create --file classes.jar --manifest mymanifest -C foo/ .
# 創(chuàng)建模塊化 jar 檔案, 其中模塊描述符位于
# classes/module-info.class:
jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ classes resources
# 將現(xiàn)有的非模塊化 jar 更新為模塊化 jar:
jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ module-info.class
# 創(chuàng)建包含多個發(fā)行版的 jar, 并將一些文件放在 META-INF/versions/9 目錄中:
jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes
要縮短或簡化 jar 命令, 可以在單獨的文本文件中指定參數(shù),
并使用 @ 符號作為前綴將此文件傳遞給 jar 命令。
示例:
# 從文件 classes.list 讀取附加選項和類文件列表
jar --create --file my.jar @classes.list
主操作模式:
-c, --create 創(chuàng)建檔案。通過 -f 或 --file 指定的檔案文件名
包含路徑時,還將創(chuàng)建
缺少的父目錄
-i, --generate-index=FILE 為指定的 jar 檔案生成
索引信息
-t, --list 列出檔案的目錄
-u, --update 更新現(xiàn)有 jar 檔案
-x, --extract 從檔案中提取指定的 (或全部) 文件
-d, --describe-module 輸出模塊描述符或自動模塊名稱
--validate 驗證 jar 檔案的內(nèi)容。此選項
將驗證由多發(fā)行版 jar 檔案導(dǎo)出
的 API 在所有不同的發(fā)行版本中
是否一致。
在任意模式下有效的操作修飾符:
-C DIR 更改為指定的目錄并包含
以下文件
-f, --file=FILE 檔案文件名。省略時, 基于操作
使用 stdin 或 stdout
--release VERSION 將下面的所有文件都放在
jar 的版本化目錄中 (即 META-INF/versions/VERSION/)
-v, --verbose 在標準輸出中生成詳細輸出
在創(chuàng)建和更新模式下有效的操作修飾符:
-e, --main-class=CLASSNAME 捆綁到模塊化或可執(zhí)行
jar 檔案的獨立應(yīng)用程序
的應(yīng)用程序入口點
-m, --manifest=FILE 包含指定清單文件中的
清單信息
-M, --no-manifest 不為條目創(chuàng)建清單文件
--module-version=VERSION 創(chuàng)建模塊化 jar 或更新
非模塊化 jar 時的模塊版本
--hash-modules=PATTERN 計算和記錄模塊的散列,
這些模塊按指定模式匹配并直接或
間接依賴于所創(chuàng)建的模塊化 jar 或
所更新的非模塊化 jar
-p, --module-path 模塊被依賴對象的位置, 用于生成
散列
只在創(chuàng)建, 更新和生成索引模式下有效的操作修飾符:
-0, --no-compress 僅存儲; 不使用 ZIP 壓縮
--date=TIMESTAMP 具有可選時區(qū)的 ISO-8601 擴展偏移
日期時間格式的時間戳(用于條目的時間戳),
例如,"2022-02-12T12:30:00-05:00"
其他選項:
-?, -h, --help[:compat] 提供此幫助,也可以選擇性地提供兼容性幫助
--help-extra 提供額外選項的幫助
--version 輸出程序版本
如果模塊描述符 'module-info.class' 位于指定目錄的
根目錄中, 或者位于 jar 檔案本身的根目錄中, 則
該檔案是一個模塊化 jar。以下操作只在創(chuàng)建模塊化 jar,
或更新現(xiàn)有的非模塊化 jar 時有效: '--module-version',
'--hash-modules' 和 '--module-path'。
如果為長選項提供了必需參數(shù)或可選參數(shù), 則它們對于
任何對應(yīng)的短選項也是必需或可選的。
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包中的文件,可以減少重新打包上傳的時間,尤其是網(wǎng)速不好的時候。
根據(jù)文件名,查找出文件在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
解壓完之后,在當(dāng)前文件夾中,就會有對應(yīng)的目錄文件:
BOOT-INF/classes/com/ehl/utb/analysis/db/xml/FocusEnterpriseMapper.xml
根據(jù)上面的解壓目錄找到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文章來源:http://www.zghlxwxcb.cn/news/detail-499568.html
參考:linux中對jar文件的操作,Linux如何修改jar里的文件,linux替換jar包文件文章來源地址http://www.zghlxwxcb.cn/news/detail-499568.html
到了這里,關(guān)于jar命令:linux中對jar文件的操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!