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

62o28rlo  于 2022-12-21  发布在  Java
关注(0)|答案(5)|浏览(81)

因此,我需要从jar / war文件中删除一个文件。我希望有类似“jar -d myjar.jar file_I_donot_need.txt”的内容
但是现在我所能看到的从Linux命令行(不使用WinRAR/Winzip或Linux等效命令)执行此操作的唯一方法是

  • 执行“jar -xvf”并提取

完整Jar文件

  • 删除我不需要的文件
  • 使用“jar -cvf”重新jar jar文件

请告诉我有更近的路吗?

qhhrdooz

qhhrdooz1#

zip -d file.jar unwanted_file.txt

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

exdqitrt

exdqitrt2#

如果你想删除文件来取消签名jar,你可以把.RSA文件的大小设置为零,这可以通过jar u来实现,参见https://stackoverflow.com/a/24678645/653539(对我来说很有效,尽管我承认这很难)。

o7jaxewo

o7jaxewo3#

在Java中,你可以复制jar中除了你想删除的条目之外的所有条目,也就是说,你必须做一个副本,但不需要创建单独的文件。
您可以通过

  • 从而产生新的罐。
  • 遍历您的Jar
  • 将条目从一个jar复制到另一个jar,跳过您想要的任何文件。
  • 如果你想的话,关闭并替换原始的jar。
u5i3ibmn

u5i3ibmn4#

如果您希望以编程方式执行此操作,可以使用Zip文件系统将zip/jar文件视为文件系统。这将允许您编辑、删除和向jar文件添加文件。
参见Appending files to a zip file with Java

ljo96ir5

ljo96ir55#

对我来说,最好的答案是lapo在这篇文章中对another answer的评论。
用户lapo写道:
我经常安装p7zip而不是zip,在这种情况下,指定文件格式很重要:7z d -tzip file.jar dir/unwanted_file.txt
用户lapo的评论是对建议直接使用zip -d的回答的回应,因为.jar文件类似于.zip存档,但格式不完全相同。
压缩错误:压缩文件结构无效
但是,我能够通过brew install p7zip安装p7zip,然后我能够使用7z d -tzip file.jar unwanted_file.txt删除。

相关问题