Apakah ada cara cepat untuk menghapus file dari Jar / war tanpa harus mengekstrak jar dan membuatnya kembali?

105

Jadi saya perlu menghapus file dari file jar / war. Saya berharap ada sesuatu seperti "jar -d myjar.jar file_I_donot_need.txt"

Tetapi sekarang satu-satunya cara yang dapat saya lihat untuk melakukan ini dari baris perintah Linux saya (tanpa menggunakan WinRAR / Winzip atau setara linux) adalah dengan

  • Lakukan "jar -xvf" dan ekstrak
    file Jar lengkap
  • Hapus file yang tidak saya butuhkan
  • Ulangi file jar menggunakan "jar -cvf"

Tolong beritahu saya ada cara yang lebih pendek?

kellyfj
sumber
3
Karena "jar" hanyalah file zip, saya rasa Anda akan lebih beruntung di superuser.com .
Kirk Woll
Anda juga dapat mencoba menulis skrip shell untuk menyelesaikan seluruh proses. Sesuatu seperti./myscript.sh -d <list of files>
Favonius

Jawaban:

202
zip -d file.jar unwanted_file.txt

jar hanyalah file zip. Jelas jauh lebih cepat daripada membuka / mengompresi ulang.

martona
sumber
3
Saya lebih sering menginstal p7zip daripada zipdan dalam hal ini penting untuk menentukan format file:7z d -tzip file.jar dir/unwanted_file.txt
lapo
@martona Saya mendapatkan kesalahan berikut: kesalahan zip: Struktur file zip
Goaler444
@ Goaler444 Saya mengalami kesalahan yang sama, tetapi menggunakan 7z seperti yang disarankan lapo berhasil untuk saya.
yby
Bagaimana cara menghapus file dari jar anak atau jar grand child?
Tom
5
Jika Anda ingin menghapus folder di toples, pastikan ada garis miring di folder yang tidak diinginkan:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

Di Java, Anda dapat menyalin semua entri jar kecuali yang ingin Anda hapus. yaitu Anda harus membuat salinan tetapi tidak perlu membuat file satu per satu.

Anda dapat melakukannya dengan

  • membuat toples baru.
  • iterasi meskipun Jar yang Anda miliki
  • salin entri dari satu toples ke yang lain, lewati file apa pun yang Anda inginkan.
  • tutup dan ganti stoples asli jika Anda mau.
Peter Lawrey
sumber
0

Jika Anda ingin menghapus file untuk membatalkan tanda tangan jar, Anda mungkin bisa membuat file .RSA berukuran nol. Ini bisa dicapai dengan adil jar u. Lihat https://stackoverflow.com/a/24678645/653539 . (Berhasil untuk saya, meskipun saya akui itu hack.)

Tomáš Záluský
sumber