2012-01-11 39 views
8

Tôi đang gặp sự cố khi xuất dự án java của mình từ nhật thực dưới dạng tệp thực thi jar. Dự án java của tôi sử dụng một thư viện bên ngoài (gọi là jri) của nó. Tôi đã xuất tệp jri.jar và đặt đường dẫn thư viện cho thư viện gốc của nó trong nhật thực và nó hoạt động rất tốt trong phát triển trong nhật thực. Tuy nhiên, khi tôi xuất khẩu nó như một tập tin jar thực thi tôi nhận được lỗi sau:Xuất sang jar Chạy được với các thư viện mã nguyên bản khác trong eclipse

Cannot find JRI native library! 
Please make sure that the JRI native library is in a directory listed in java.library.path. 

tôi đã đặt một thư mục có tên lib trong cùng thư mục với jar của dự án của tôi; thư mục lib này chứa thư viện riêng của jri. Thư viện gốc của jri không có trong một tệp nhưng trong một thư mục. Đây là thiết lập tương tự tôi có trong nhật thực.

Con đường tôi đang xuất khẩu dự án của tôi trong nhật thực là

Export... 
Java > Runnable JAR file 
Copy required libraries into a sub folder next to the generated Jar 
Finish 

Và thư mục của tôi được tổ chức như thế này

folder project 
    project.jar 
    project_lib 
    jri.jar 
    jri native library folder 

Các MANIFEST.MF của project.jar của tôi là:

Manifest-Version: 1.0 
Class-Path: . project_lib/jri.jar 
Main-Class: index 

Điều tôi muốn đạt được là cung cấp cho người khác một thư mục bao gồm project.jar và bất kỳ thứ gì khác cần thiết để cô ấy/anh ấy có thể chạy nó mà không cần phải cài đặt bất cứ thứ gì khác. Cảm ơn rất nhiều

+0

Nếu bạn ghét không sử dụng nó, không đổ lỗi về nó. Nếu có gì đó sai với nhật thực thì có thể là lỗi của bạn không phải nhật thực. – ozhan

+1

Kiểm tra câu trả lời tương tự này, nó trợ giúp di chuyển. http://stackoverflow.com/questions/2702132/how-can-i-include-platform-specific-native-libraries-in-the-jar-file-using-ecli – ozhan

+2

Bạn đã thử thêm project_lib/jri_native_library_folder vào tệp kê khai .mf classpath? – KJP

Trả lời

8

Thêm một kịch bản có chứa một cái gì đó như thế:

#!/bin/bash 
java -Djava.library.path=project_lib/native/ -jar project_lib/jri.jar 

tôi xuất khẩu một số dự án java như vậy.

1

Bạn có thể đặt các thư viện bên jar của bạn:

Export...

Java > Runnable JAR file

Package required libraries into generated Jar

Finish

tôi luôn luôn xuất theo cách này. Tôi không biết nếu nó sẽ làm việc trong trường hợp của bạn, nhưng đáng thử.


Edit:

Xem những liên kết này:

Tôi đoán là điều này có cái gì để làm với LD_LIBRARY_PATH không correc tly đã được thiết lập. Hoặc tệp mà nó đang tìm kiếm không nằm trong đường dẫn được liệt kê.

+0

Tôi đã thử nhưng nó không hoạt động, hãy nhớ rằng các thư viện gốc cho các gói bên ngoài là trong một thư mục và java.library.path cần phải có quyền truy cập vào nó. –

+1

@JulioDiaz: xem bản chỉnh sửa, tôi hy vọng có thể giúp bạn. – falsarella

+1

đã hoạt động đối với trường hợp của tôi. –

3

Điều này tương đối khó thực hiện. Các giải pháp tôi đã thấy liên quan đến việc trích xuất các thư viện gốc trong JAR vào thư mục tạm thời của hệ điều hành và sau đó tải nó. Tôi sẽ đi cho một giải pháp tích hợp cho điều đó. One JarJava Class Loader hỗ trợ và trên trang thứ hai, bạn sẽ tìm thấy các liên kết đến các công cụ tương tự.

+0

Bạn nói đúng, theo như tôi biết, Java không thể tải các thư viện JNI (.dll, .so, vv) từ một tệp JAR. Các giải pháp bạn đề cập trích xuất các tệp có liên quan trong thời gian chạy, để Java có thể tải chúng. – ChrisJ

0

Bạn biết tôi đã có vấn đề tương tự

Could not extract native JNI library. 

tất cả ở trên đề nghị không thể giúp tôi.Tôi không thể dừng lại và bắt đầu deamon gradle bằng cách sử dụng lệnh sau:

gradle --stop 

Tôi thấy rằng deamon gradle vẫn không dừng lại trong quá trình của tôi. Đó là lý do tại sao tôi giết nó trong quá trình của tôi và tất cả sẽ tốt :)

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