有没有一种快速方法可以从 Jar / war 中删除文件,而无需提取 jar 并重新创建它?

问题描述 投票:0回答:5

所以我需要从

.jar
.war
文件中删除文件。 我希望有类似的东西
jar -d myjar.jar  file_I_donot_need.txt

但是,现在我能看到从 Linux 命令行执行此操作的唯一方法(不使用 WinRAR/Winzip 或 Linux 等效项)是

  • 执行
    jar -xvf
    并提取完整的
    .jar
    文件
  • 删除我不需要的文件
  • 使用
    .jar
     重新 jar 
    jar -cvf
  • 文件

请告诉我还有更短的方法。

java linux jar
5个回答
261
投票
zip -d file.jar unwanted_file.txt

jar 毕竟只是一个 zip 文件。绝对比解压缩/重新压缩快得多。


3
投票

如果您想删除文件以取消签名 jar,您可以将 .RSA 文件大小设置为零。只需

jar u
即可完成此操作。请参阅https://stackoverflow.com/a/24678645/653539。 (为我工作,虽然我承认这是黑客。)


1
投票

在 Java 中,您可以复制 jar 中除要删除的条目之外的所有条目。即您必须制作副本,但不需要创建单独的文件。

您可以通过以下方式做到这一点

  • 创建一个新罐子。
  • 迭代你拥有的 Jar
  • 将条目从一个 jar 复制到另一个 jar,跳过任何您想要的文件。
  • 如果需要,关闭并更换原来的罐子。

1
投票

对我来说最好的答案是lapo对这篇文章的另一个答案评论

用户lapo写道

我更经常安装

p7zip
而不是 zip,在这种情况下,指定文件格式很重要:
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
删除。


0
投票

如果您希望以编程方式执行此操作,可以使用 Zip 文件系统将 zip/jar 文件视为文件系统。这将允许您编辑、删除文件以及将文件添加到 jar 文件中。

请参阅 使用 Java 将文件附加到 zip 文件

© www.soinside.com 2019 - 2024. All rights reserved.