Có cách nào nhanh chóng để xóa tệp khỏi Jar / war mà không cần phải giải nén jar và tạo lại nó không?


105

Vì vậy, tôi cần xóa một tệp khỏi tệp jar / war. Tôi đã hy vọng có một cái gì đó giống như "jar -d myjar.jar file_I_donot_need.txt"

Nhưng hiện tại, cách duy nhất tôi có thể thấy để thực hiện việc này từ dòng lệnh Linux của mình (không sử dụng WinRAR / Winzip hoặc tương đương với linux) là

  • Thực hiện "jar -xvf" và giải nén
    tệp Jar hoàn chỉnh
  • Xóa (các) tệp tôi không cần
  • Điều chỉnh lại tệp jar bằng "jar -cvf"

Xin vui lòng cho tôi biết có một cách ngắn hơn?


3
Vì "jar" chỉ là một tệp zip, tôi nghĩ rằng bạn sẽ gặp may mắn hơn trên superuser.com .
Kirk Woll

Bạn cũng có thể thử viết một kịch bản shell để kết thúc toàn bộ quá trình. Cái gì đó giống như./myscript.sh -d <list of files>
Favonius

Câu trả lời:


202
zip -d file.jar unwanted_file.txt

jar chỉ là một tập tin zip. Chắc chắn nhanh hơn nhiều so với giải nén / nén lại.


3
Tôi thường xuyên hơn đã được cài đặt p7zip thay vì zipvà trong trường hợp này điều quan trọng là phải xác định định dạng file:7z d -tzip file.jar dir/unwanted_file.txt
Lapo

@martona Tôi nhận được lỗi sau: zip lỗi: cấu trúc file Zip
Goaler444

@ Goaler444 Tôi gặp lỗi tương tự, nhưng sử dụng 7z như lapo đề xuất đã hiệu quả với tôi.
yby

Làm cách nào để xóa tệp khỏi jar con hoặc jar con lớn?
Tom

5
Nếu bạn muốn xóa một thư mục trong jar, chắc chắn có một dấu gạch chéo trên các thư mục không mong muốn:zip -d file.jar unwanted_folder/
Martin Woolstenhulme

1

Trong Java, bạn có thể sao chép tất cả các mục nhập của một jar ngoại trừ mục bạn muốn xóa. tức là bạn phải tạo một bản sao nhưng không cần tạo các tệp riêng lẻ.

Bạn có thể làm điều này bằng cách

  • tạo một bình mới.
  • lặp lại mặc dù Jar bạn có
  • sao chép mục nhập từ bình này sang bình khác, bỏ qua bất kỳ tệp nào bạn muốn.
  • đóng và thay thế bình gốc nếu bạn muốn.

0

Trong trường hợp bạn muốn xóa tệp để hủy ký hiệu jar đã ký, bạn có thể chỉ cần đặt tệp .RSA có kích thước bằng không. Điều này có thể được thực hiện chỉ với jar u. Xem https://stackoverflow.com/a/24678645/653539 . (Làm việc cho tôi, mặc dù tôi thừa nhận đó là hack.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.