有没有一种快速的方法可以从 Jar/war 中删除一个文件,而不必提取这个 Jar 并重新创建它?

所以我需要从 jar/war 文件中删除一个文件。 我希望有类似“ jar-d myjar.jar file _ I _ donot _ need. txt”的文件

但是现在我能看到的在我的 Linux 命令行(不使用 WinRAR/Winzip 或 Linux 等价物)中完成这项工作的唯一方法是

  • 执行“ jar-xvf”并提取
    完整的罐子文件
  • 删除不需要的文件
  • 使用“ jar-cvf”重新打开 jar 文件

请告诉我有捷径吗?

115370 次浏览

在 Java 中,你可以复制一个 jar 的所有条目,除了你想删除的那个。也就是说,你必须做一个拷贝,但不需要创建单独的文件。

你可以通过

  • 创造一个新的罐子。
  • iterating though the Jar you have
  • 将条目从一个 jar 复制到另一个 jar,跳过任何需要的文件。
  • 如果你愿意,可以关闭并更换原来的罐子。
zip -d file.jar unwanted_file.txt

Jar 毕竟只是一个 zip 文件,肯定比解压缩/重压缩要快得多。

如果要删除文件以取消签名的 jar,那么可以只使用。RSA 文件大小为零。这可以用 jar u来完成。见 https://stackoverflow.com/a/24678645/653539。(对我来说很管用,虽然我承认这很蹩脚。)

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

参见 用 Java 将文件附加到 zip 文件