Есть ли быстрый способ удалить файл из Jar / war без необходимости извлекать банку и воссоздавать ее?

105

Поэтому мне нужно удалить файл из файла jar / war. Я надеялся, что там что-то вроде "jar -d myjar.jar file_I_donot_need.txt"

Но сейчас единственный способ сделать это из командной строки Linux (без использования WinRAR / Winzip или эквивалента Linux) - это

  • Выполните "jar -xvf" и извлеките
    полный файл Jar.
  • Удалите файлы, которые мне не нужны
  • Повторите jar-файл с помощью "jar -cvf"

Подскажите пожалуйста, есть способ покороче?

Kellyfj
источник
3
Поскольку «jar» - это просто zip-файл, я подозреваю, что на superuser.com вам повезет больше .
Кирк Уолл,
Вы также можете попробовать написать сценарий оболочки, чтобы обернуть весь процесс. Что-то вроде./myscript.sh -d <list of files>
Favonius

Ответы:

202
zip -d file.jar unwanted_file.txt

jar - это всего лишь zip-файл. Определенно намного быстрее, чем распаковка / повторное сжатие.

Мартона
источник
3
У меня чаще всего устанавливается p7zip, zipи в этом случае важно указать формат файла:7z d -tzip file.jar dir/unwanted_file.txt
Lapo
@martona Я получаю следующую ошибку: zip error: Zip file structure
Goaler444
@ Goaler444 У меня была та же ошибка, но использование 7z в качестве предложенного Lapo сработало для меня.
yby
Как удалить файл из дочерней или большой детской банки?
Том
5
Если вы хотите удалить папку в банке, убедитесь, что в конце ненужной папки есть косая черта:zip -d file.jar unwanted_folder/
Мартин Вулстенхалм,
1

В Java вы можете скопировать все записи jar, кроме той, которую хотите удалить. т.е. вам нужно сделать копию, но не нужно создавать отдельные файлы.

Вы можете сделать это

  • создание новой банки.
  • повторяя через Jar, который у вас есть
  • скопируйте запись из одной банки в другую, пропуская любые файлы, которые вам нужны.
  • закройте и замените оригинальную банку, если хотите.
Питер Лоури
источник
0

Если вы хотите удалить файл, чтобы не подписывать подписанный jar, вы, вероятно, можете просто сделать файл .RSA нулевым размером. Это можно сделать с помощью всего jar u. См. Https://stackoverflow.com/a/24678645/653539 . (Сработало для меня, хотя я признаю, что это взлом.)

Томаш Залуски
источник