Gibt es eine schnelle Möglichkeit, eine Datei aus einem Jar / War zu löschen, ohne das Jar extrahieren und neu erstellen zu müssen?

105

Also muss ich eine Datei aus einer JAR / War-Datei entfernen. Ich hatte gehofft, dass es so etwas wie "jar -d myjar.jar file_I_donot_need.txt" gibt.

Aber im Moment kann ich dies nur über meine Linux-Befehlszeile sehen (ohne WinRAR / Winzip oder ein Linux-Äquivalent zu verwenden)

  • Führen Sie "jar -xvf" aus und extrahieren Sie die
    vollständige Jar-Datei
  • Entfernen Sie die Dateien, die ich nicht benötige
  • Rejar die JAR-Datei mit "jar -cvf"

Bitte sagen Sie mir, dass es einen kürzeren Weg gibt.

kellyfj
quelle
3
Da ein "Glas" nur eine Zip-Datei ist, haben Sie vermutlich auf superuser.com mehr Glück .
Kirk Woll
Sie können auch versuchen, ein Shell-Skript zu schreiben, um den gesamten Prozess zu beenden. So etwas wie./myscript.sh -d <list of files>
Favonius

Antworten:

202
zip -d file.jar unwanted_file.txt

jar ist schließlich nur eine zip-datei. Auf jeden Fall viel schneller als das Dekomprimieren / Neukomprimieren.

martona
quelle
3
Ich habe öfter p7zip anstelle von installiert zipund in diesem Fall ist es wichtig, das Dateiformat anzugeben:7z d -tzip file.jar dir/unwanted_file.txt
Lapo
@martona Ich erhalte den folgenden Fehler: Zip-Fehler: Zip-Dateistruktur
Goaler444
@ Goaler444 Ich hatte den gleichen Fehler, aber die Verwendung von 7z als Lapo-Vorschlag funktionierte für mich.
Bis zum
Wie lösche ich eine Datei aus einem Kinder- oder Enkelkindglas?
Tom
5
Wenn Sie einen Ordner im Glas löschen möchten, stellen Sie sicher, dass der unerwünschte Ordner einen abschließenden Schrägstrich enthält:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

In Java können Sie alle Einträge eines JARs kopieren, mit Ausnahme des Eintrags, den Sie löschen möchten. Das heißt, Sie müssen eine Kopie erstellen, aber nicht die einzelnen Dateien erstellen.

Sie können dies tun, indem Sie

  • ein neues Glas erstellen.
  • Iterieren durch das Glas, das Sie haben
  • Kopieren Sie den Eintrag von einem Glas in das andere und überspringen Sie alle gewünschten Dateien.
  • Schließen Sie das Originalglas und ersetzen Sie es, wenn Sie möchten.
Peter Lawrey
quelle
0

Wenn Sie eine Datei löschen möchten, um die signierte JAR-Datei zu entfernen, können Sie die RSA-Datei wahrscheinlich auf Null setzen. Dies kann mit nur erreicht werden jar u. Siehe https://stackoverflow.com/a/24678645/653539 . (Hat für mich gearbeitet, obwohl ich zugebe, dass es ein Hack ist.)

Tomáš Záluský
quelle