所以我需要从
.jar
或 .war
文件中删除文件。
我希望有类似的东西jar -d myjar.jar file_I_donot_need.txt
但是,现在我能看到从 Linux 命令行执行此操作的唯一方法(不使用 WinRAR/Winzip 或 Linux 等效项)是
jar -xvf
并提取完整的 .jar
文件.jar
重新 jar
jar -cvf
请告诉我还有更短的方法。
zip -d file.jar unwanted_file.txt
jar 毕竟只是一个 zip 文件。绝对比解压缩/重新压缩快得多。
如果您想删除文件以取消签名 jar,您可以将 .RSA 文件大小设置为零。只需
jar u
即可完成此操作。请参阅https://stackoverflow.com/a/24678645/653539。 (为我工作,虽然我承认这是黑客。)
在 Java 中,您可以复制 jar 中除要删除的条目之外的所有条目。即您必须制作副本,但不需要创建单独的文件。
您可以通过以下方式做到这一点
我更经常安装
而不是 zip,在这种情况下,指定文件格式很重要:p7zip
7z d -tzip file.jar dir/unwanted_file.txt
用户 lapo 的评论是对建议直接使用
zip -d
的答案的回应,因为 .jar 文件类似于 .zip 存档,但格式不完全相同。和其他人一样,我无法使用zip -d file.jar unwanted_file.txt
。这会导致
zip 错误:Zip 文件结构无效
但是,我能够通过
p7zip
安装 brew install p7zip
,然后我能够使用 7z d -tzip file.jar unwanted_file.txt
删除。
如果您希望以编程方式执行此操作,可以使用 Zip 文件系统将 zip/jar 文件视为文件系统。这将允许您编辑、删除文件以及将文件添加到 jar 文件中。