2010-09-27 28 views
5

Tôi đang sử dụng Java để phát triển một ứng dụng và tôi có một thư viện mà tôi cần để có thể sử dụng. Thư viện có tệp jar và tệp dll. Tại thời điểm này tôi đã đặt tập tin dll vào thư mục hệ thống của tôi và liên kết các jar với IDE. Câu hỏi của tôi là, tôi muốn gói tất cả mọi thứ vào một jar thực thi duy nhất mà người dùng có thể chạy (có thể sử dụng webstart).Đóng gói Thư viện JNI

Làm cách nào để tạo tệp jar này mà không cần người dùng sao chép tệp dll bên trong thư mục hệ thống? Có cách nào tôi có thể đặt mọi thứ vào một kho lưu trữ không?

+0

http://forums.sun.com/thread.jspa?threadID=5358593 Điều này có thể giải quyết được sự cố của bạn –

Trả lời

3

Bạn có thể gói .dll vào .jar, nhưng tệp .dll thực phải được đóng gói từ đó trước khi có thể tải vì cách Windows xử lý .dll s. Không có cách nào để tải một số .dll trực tiếp từ bên trong .jar.

This question dường như có triển khai thích hợp. Lưu ý, mặc dù, nó có phần dễ bị lỗi: nếu chương trình không viết quyền truy cập đến bất cứ nơi nào nó sẽ trích xuất các .dll, bạn đang ở trong một tình huống kỳ quái; bạn không thể tải số .dll vì bạn không có quyền ghi trước tiên.

Một giải pháp mạnh mẽ hơn là sử dụng một số loại cài đặt để cài đặt toàn bộ ứng dụng vào một hệ thống phân cấp thư mục như

/whatEver/myApp/     (The working directory of the app.) 
/whatEver/myApp/myApp.jar  (The main app.) 
/whatEver/myApp/lib/library.dll (The JNI library.) 

Sau đó, bạn có thể tải dll chỉ đơn giản là sử dụng một đường dẫn tương đối đến thư mục làm việc,

System.loadLibrary("lib/library.dll"); 

Để mạnh mẽ hơn nữa, bạn sẽ muốn đảm bảo rằng bạn đang chạy một JVM với số bit thích hợp trước khi thử tải thư viện. Một thực tế ít được quảng cáo là một máy ảo 64-bit không thể tải các thư viện 32 bit, cũng như ngược lại. Xem câu hỏi this.

0

Bạn có thể muốn xem nội dung này: http://one-jar.sourceforge.net/ Vì bạn không cung cấp bất kỳ thông tin nào về quy trình xây dựng của mình, tôi không thể trợ giúp thêm.

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