2012-01-11 10 views
8

में अतिरिक्त देशी कोड पुस्तकालयों के साथ चलने योग्य जार में निर्यात करना मुझे जार निष्पादन योग्य फ़ाइल के रूप में ग्रहण से मेरी जावा परियोजना को निर्यात करने में समस्या हो रही है। मेरा जावा प्रोजेक्ट बाहरी पुस्तकालय का उपयोग करता है (इसे जेरी कहा जाता है)। मैंने jri.jar फ़ाइल निर्यात की है और ग्रहण में अपनी मूल पुस्तकालय के लिए लाइब्रेरी पथ सेट किया है, और यह ग्रहण में विकास में बहुत अच्छा काम करता है। हालांकि, जब मैं एक निष्पादन योग्य जार फ़ाइल मैं निम्नलिखित त्रुटि मिलती है के रूप में निर्यात:ग्रहण

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

मैं एक फ़ोल्डर अपने प्रोजेक्ट के जार उसी निर्देशिका में lib बुलाया रखा है; इस lib फ़ोल्डर में jri की मूल पुस्तकालय शामिल है। jri की मूल पुस्तकालय एक फ़ाइल में नहीं बल्कि एक फ़ोल्डर में है। ग्रहण में मेरे पास यही वही सेटअप है।

तरह से मैं ग्रहण में अपने प्रोजेक्ट का निर्यात कर रहा हूँ

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

है और मेरे फ़ोल्डर इस

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

की तरह आयोजित किया जाता है मेरी project.jar की MANIFEST.MF है:

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

जो मैं प्राप्त करना चाहता हूं वह है कि किसी अन्य व्यक्ति को project.jar और किसी और चीज की आवश्यकता वाले फ़ोल्डर को देना है ताकि वह/वह इसे और कुछ स्थापित करने की आवश्यकता के बिना इसे चला सकते हैं। धन्यवाद इतना

+0

यदि आप इसका उपयोग न करें, तो इसके बारे में दोष न दें। अगर ग्रहण के साथ कुछ गलत हो जाता है तो यह आपकी गलती ग्रहण नहीं हो सकती है। – ozhan

+1

इसी तरह के उत्तर की जांच करें, यह मदद मिटाता है। http://stackoverflow.com/questions/2702132/how-can-i-include-platform- विशिष्ट-native- पुस्तकालय-in-the-jar-file-using-ecli – ozhan

+2

क्या आपने manifest_lib/jri_native_library_folder को प्रकट करने का प्रयास किया था एमएम क्लासपाथ? – KJP

उत्तर

8

ऐसे ही एक कुछ स्क्रिप्ट से युक्त जोड़ें।

1

आप पुस्तकालयों अपने जार के अंदर रख सकते हैं:

Export...

Java > Runnable JAR file

Package required libraries into generated Jar

Finish

मैं हमेशा इस तरह से निर्यात करें। मुझे नहीं पता कि यह आपके मामले में काम करेगा, लेकिन कोशिश करने लायक है।


संपादित करें:

देखें इन कड़ियों:

मेरा अनुमान है कि इस LD_LIBRARY_PATH correc नहीं के साथ क्या करना है कुछ है टली सेट किया गया है। या जिस फ़ाइल को वह खोज रहा है वह सूचीबद्ध पथ में नहीं है।

+0

मैंने कोशिश की है लेकिन यह काम नहीं करता है, याद रखें कि बाहरी पैकेज के लिए देशी पुस्तकालय एक फ़ोल्डर में हैं और java.library.path को इसका उपयोग करने की आवश्यकता है। –

+1

@JulioDiaz: संपादन देखें, मुझे उम्मीद है कि आपकी मदद कर सकते हैं। – falsarella

+1

मेरे मामले के लिए काम किया। –

3

यह लागू करने के लिए अपेक्षाकृत कठिन है। मैंने जो समाधान देखा है, वह जेएआर में मूल पुस्तकालयों को एक ओएस temp निर्देशिका में निकालने और फिर इसे लोड करने में शामिल है। मैं इसके लिए एक एकीकृत समाधान के लिए जाना होगा। One Jar और Java Class Loader इसका समर्थन करते हैं, और दूसरे पृष्ठ पर आपको समान टूल के लिंक मिलेंगे।

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

मैं कुछ जावा परियोजनाओं कि जिस तरह से निर्यात:

+0

आप सही हैं, जहां तक ​​मुझे पता है, जावा एक जेएआर फ़ाइल से जेएनआई लाइब्रेरीज़ (.dll, .so, आदि) लोड नहीं कर सकता है। आपके द्वारा उल्लेखित समाधान रनटाइम पर प्रासंगिक फ़ाइलों को निकालें, ताकि जावा उन्हें लोड कर सके। – ChrisJ

0

तुम्हें पता है मैं इसी तरह की समस्याओं

Could not extract native JNI library. 

सब से ऊपर का प्रस्ताव मुझे मदद नहीं कर सकता था।मैं नहीं रोक सकता है और आदेश का पालन का उपयोग करके Gradle deamon शुरू:

gradle --stop 

मुझे लगता है कि Gradle deamon को अभी भी अपने प्रक्रियाओं में रोका नहीं देखा। यही कारण है कि मैं इसे अपनी प्रक्रिया में मारता हूं और सब ठीक हो जाएगा :)