Existe-t-il un moyen rapide de supprimer un fichier d'un Jar / war sans avoir à extraire le fichier JAR et à le recréer?

105

J'ai donc besoin de supprimer un fichier d'un fichier jar / war. J'espérais qu'il y avait quelque chose comme "jar -d myjar.jar file_I_donot_need.txt"

Mais pour le moment, la seule façon de le faire à partir de ma ligne de commande Linux (sans utiliser WinRAR / Winzip ou l'équivalent Linux) est de

  • Faites "jar -xvf" et extrayez le
    fichier Jar complet
  • Supprimez le (s) fichier (s) dont je n'ai pas besoin
  • Rejar le fichier jar en utilisant "jar -cvf"

Veuillez me dire qu'il existe un moyen plus court?

kellyfj
la source
3
Puisqu'un "jar" n'est qu'un fichier zip, je suppose que vous aurez plus de chance sur superuser.com .
Kirk Woll
Vous pouvez également essayer d'écrire un script shell pour encapsuler l'ensemble du processus. Quelque chose comme./myscript.sh -d <list of files>
Favonius

Réponses:

202
zip -d file.jar unwanted_file.txt

jar n'est qu'un fichier zip après tout. Certainement beaucoup plus rapide que la décompression / recompression.

Martona
la source
3
J'ai plus souvent installé p7zip à la place de zipet dans ce cas, il est important de spécifier le format de fichier:7z d -tzip file.jar dir/unwanted_file.txt
lapo
@martona J'obtiens l'erreur suivante: erreur zip: structure du fichier Zip
Goaler444
@ Goaler444 J'ai eu la même erreur, mais utiliser 7z comme lapo suggéré a fonctionné pour moi.
ypour le
Comment supprimer un fichier d'un pot enfant ou d'un pot grand enfant?
Tom
5
Si vous souhaitez supprimer un dossier dans le bocal, assurez-vous qu'il y a une barre oblique à la fin du dossier indésirable:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

En Java, vous pouvez copier toutes les entrées d'un fichier jar à l'exception de celle que vous souhaitez supprimer. c'est-à-dire que vous devez faire une copie, mais vous n'avez pas besoin de créer les fichiers individuels.

Vous pouvez le faire en

  • créer un nouveau pot.
  • itérer à travers le pot que vous avez
  • copiez l'entrée d'un pot à l'autre, en sautant tous les fichiers souhaités.
  • fermez et remplacez le pot d'origine si vous le souhaitez.
Peter Lawrey
la source
0

Dans le cas où vous souhaitez supprimer un fichier afin d'annuler la signature d'un fichier jar signé, vous pouvez probablement simplement faire en sorte que le fichier .RSA soit de taille zéro. Cela peut être accompli avec juste jar u. Voir https://stackoverflow.com/a/24678645/653539 . (A travaillé pour moi, même si j'admets que c'est du hack.)

Tomáš Záluský
la source