jar cvf new.jar -C 解压目录/ .
重新压缩,注意保留原目录结构,确保META-INF等重要文件完整。在Linux系统中,JAR包本质是遵循ZIP格式的压缩文件,解压后重新压缩需确保文件结构和权限正确,以下是详细操作指南:
解压JAR包
方法1:使用jar
命令(推荐)
jar xvf your_file.jar # 解压到当前目录
x
:解压v
:显示过程f
:指定文件名
方法2:使用unzip
unzip your_file.jar -d output_dir/ # 解压到指定目录
修改文件(可选)
解压后按需编辑文件(如配置文件、类文件等),务必注意:
- 保留
META-INF/
目录结构(内含签名和清单文件) - 若修改代码,需重新编译(
.java
→.class
)
重新压缩为JAR包
方法1:使用jar
命令(自动处理清单文件)
jar cvf new_file.jar -C extracted_dir/ . # 将目录内容打包
c
:创建新JARf
:指定输出文件名-C
:切换到指定目录后再打包- 末尾的:打包该目录下所有文件
方法2:使用zip
命令(需手动处理权限)
cd extracted_dir/ && zip -r ../new_file.jar * # 压缩当前目录所有文件
-r
:递归压缩- :包含所有文件(含隐藏文件需用)
关键注意事项
-
清单文件保护
JAR包的META-INF/MANIFEST.MF
定义元数据,删除或损坏会导致程序无法运行,解压后勿移动此目录。 -
文件权限保留
使用zip
打包时,添加-X
保留UID/GID:zip -rX new_file.jar *
-
签名验证问题
若原JAR有数字签名,解压后签名失效,需用jarsigner
重新签名:jarsigner -keystore your_keystore.jks new_file.jar your_alias
验证新JAR包
- 检查结构:
jar tf new_file.jar # 列出内容
- 运行测试(如有主类):
java -jar new_file.jar
完整操作示例
# 解压 jar xvf app.jar -C extracted/ # 修改文件(示例:更新配置文件) vim extracted/config.properties # 重新打包 jar cvf new_app.jar -C extracted/ . # 验证 java -jar new_app.jar
为什么推荐jar
命令?
- 专为JAR设计,自动处理清单文件和目录结构
- 避免
zip
命令可能导致的权限或路径错误 - 与Java生态工具链(如
jarsigner
)无缝协作
引用说明:本文操作基于OpenJDK官方文档及GNU ZIP标准,参考来源:
- Oracle
jar
工具指南:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jar.html- ZIP命令行手册:https://linux.die.net/man/1/zip
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/17312.html