2012-03-08 31 views
57

Tôi muốn biết sự khác biệt giữa việc trích xuất và đóng gói thư viện thành tệp jar từ nhật thực với việc tạo tệp jar có thể chạy được.Sự khác biệt giữa việc trích xuất và đóng gói thư viện thành tệp jar

Nếu chương trình của tôi (jar chạy được) sử dụng các lớp khác yêu cầu các thư viện bên ngoài (lọ), tôi nên chọn gì?

+0

có thể trùng lặp của [Cái gì là thứ e khác biệt giữa các tùy chọn xử lý thư viện jar runnable?] (http://stackoverflow.com/questions/8302894/what-is-the-difference-between-runnable-jar-library-handling-options) –

Trả lời

38

Nếu bạn muốn đặt các lọ vào tệp jar đã tạo, bạn có thể sử dụng phương pháp đóng gói. Ví dụ: nếu bạn đang sử dụng thư viện Apache hoặc một số lọ bên thứ 3 khác, bạn có thể muốn giữ các lọ này được bảo quản trong bình được tạo. Trong trường hợp này, hãy sử dụng bao bì. "Đóng gói thư viện cần thiết vào tệp jar" tùy chọn đặt các lớp gói org.eclipse.jdt.internal.jarinjarloader vào tệp được tạo của bạn và gói này nằm ngay dưới thư mục gốc của tệp jar được tạo. Tùy chọn này cũng tạo một tệp jar lớn hơn về kích thước do các lớp trình nạp jar của Eclipse.

Trích xuất thư viện bắt buộc sẽ dẫn đến việc đưa các lớp thư viện của bên thứ ba vào tệp jar của bạn bằng cách thực hiện theo quy ước đặt tên gói, ví dụ: nếu bạn mở nội dung của bạn jar bạn có thể thấy một số lớp học theo org.apache.. gói.

mục lớp chủ yếu là khác nhau giữa các MANIFEST.MF file của các tập tin jar:

lớp nhập chính khi bạn gói thư viện cần thiết:

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 

lớp nhập chính khi bạn chiết xuất cần thư viện :

Main-Class: YourMainClass 
+5

lợi thế hoặc sử dụng là gì sau đó của packaing? – ctekk

+1

bằng cách đóng gói, bạn có thể tải các tệp jar vào jar được tạo thông qua lớp "JarRsrcLoader". nếu bạn đang sử dụng lọ bên thứ 3 và muốn kết hợp mã ứng dụng của bạn với các lọ này, bạn có thể sử dụng tiện ích đóng gói của nhật thực như thế này. xem câu trả lời đã chỉnh sửa của tôi. – Juvanis

+10

Hãy coi chừng các vấn đề về hiệu suất. Tôi đã sử dụng để gói các lọ thư viện của tôi bên trong lọ ứng dụng của tôi bằng cách sử dụng jarinjarloader cho đến ngày hôm qua. Sau đó, sau khi cập nhật JRE lên bản cập nhật phiên bản 31 (trên cửa sổ), việc thực thi ứng dụng của tôi trở nên chậm hơn rất nhiều (lên đến 10x). Vấn đề đã được giải quyết khi tôi chọn trích xuất nội dung của các lọ thư viện vào trong lọ của tôi. – Giuseppe

Các vấn đề liên quan