Czy istnieje szybki sposób na usunięcie pliku z Jar / war bez konieczności wyodrębniania słoika i ponownego tworzenia go?

105

Więc muszę usunąć plik z pliku jar / war. Miałem nadzieję, że pojawiło się coś takiego jak „jar -d myjar.jar file_I_donot_need.txt”

Ale w tej chwili jedynym sposobem, w jaki mogę to zrobić z mojego wiersza poleceń Linuksa (bez używania WinRAR / Winzip lub odpowiednika Linuksa), jest

  • Wykonaj „jar -xvf” i wyodrębnij
    cały plik JAR
  • Usuń pliki, których nie potrzebuję
  • Odtwórz plik jar za pomocą polecenia „jar -cvf”

Proszę, powiedz mi, że istnieje krótsza droga?

kellyfj
źródło
3
Ponieważ „jar” to tylko plik zip, podejrzewam, że będziesz miał więcej szczęścia na superuser.com .
Kirk Woll,
Możesz także spróbować napisać skrypt powłoki, aby opakować cały proces. Coś jak./myscript.sh -d <list of files>
Favonius

Odpowiedzi:

202
zip -d file.jar unwanted_file.txt

jar to w końcu tylko plik zip. Zdecydowanie dużo szybciej niż dekompresja / rekompresja.

martona
źródło
3
Częściej zamiast niego mam zainstalowany p7zip zipiw tym przypadku ważne jest określenie formatu pliku:7z d -tzip file.jar dir/unwanted_file.txt
lapo
@martona Otrzymuję następujący błąd: błąd zip: struktura pliku Zip
Goaler444
@ Goaler444 Miałem ten sam błąd, ale użycie 7z zgodnie z sugestią lapo zadziałało dla mnie.
yby
Jak usunąć plik z słoika podrzędnego lub słoika wielkiego dziecka?
Tom
5
Jeśli chcesz usunąć folder ze słoika, upewnij się, że na niechcianym folderze znajduje się końcowy ukośnik:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

W Javie możesz skopiować wszystkie wpisy z jar z wyjątkiem tego, który chcesz usunąć. tzn. musisz wykonać kopię, ale nie musisz tworzyć pojedynczych plików.

Możesz to zrobić przez

  • tworzenie nowego słoika.
  • iterowanie przez Jar, który masz
  • skopiuj wpis z jednego pliku do drugiego, pomijając dowolne pliki.
  • zamknij i włóż oryginalny słoik, jeśli chcesz.
Peter Lawrey
źródło
0

W przypadku, gdy chcesz usunąć plik w celu wyrejestrowania podpisanego pliku jar, prawdopodobnie możesz po prostu ustawić plik .RSA o zerowym rozmiarze. Można to osiągnąć za pomocą just jar u. Zobacz https://stackoverflow.com/a/24678645/653539 . (U mnie zadziałało, chociaż przyznaję, że to hack).

Tomáš Záluský
źródło