2012-04-09 20 views
13

पर जेएनआई लाइब्रेरी जोड़ना मैं मैवेन का उपयोग करके अपनी प्रोजेक्ट में अपनी साझा ऑब्जेक्ट (.so) फ़ाइल सहित जेएनआई लाइब्रेरी जोड़ना चाहता हूं। दुर्भाग्यवश यह अभी तक एक सार्वजनिक भंडार पर नहीं है, इसलिए मुझे लगता है कि इसे अपने स्थानीय भंडार पर इसे काम करने के लिए इसे स्थापित करना है।स्थानीय मेवेन रिपोजिटरी

मैवेन में मूल परियोजना को शामिल करने के लिए मैं अपने प्रोजेक्ट में बंडल करने के लिए कैसे जा सकता हूं (और अंत में कॉपी-निर्भरता प्लगइन के साथ निर्यात किया जाता है)। यह पैकेजिंग के साथ एक मानक जे 2 एसई ऐप (वेब-ऐप नहीं) है .jar?

लाइब्रेरी जो मैं जोड़ने की कोशिश कर रहा हूं वह junixsocket है, बस अगर यह जानने में मदद करता है। इसमें एक .so (मूल पुस्तकालय) घटक है, और जावा .jar घटक।

मैं maven-nar-plugin पर आया जो मूल निर्माण को लक्षित करता है, लेकिन एक तीसरी पार्टी जेएनआई लाइब्रेरी को बंडल करने के बजाए कोड से जेएनआई प्रोजेक्ट बनाने की दिशा में अधिक उन्मुख लगता है, और मैं एक साथ जिग्स पहेली को टुकड़ा नहीं कर सकता ।

मैं के बारे में कैसे जाना है:

  1. अपने स्थानीय भंडार में इन स्थापित कर रहा है, .so पुस्तकालय के आधार पर .jar रही है।
  2. पीओएम फ़ाइल में निर्भरता (.jar और .so पर) सहित।

धन्यवाद।

उत्तर

5

मैं जार में .so शामिल करता हूं और इसे लोड करने से पहले मंच विशिष्ट साझा लाइब्रेरी को अतिरिक्त करता हूं। इस तरह यह किसी भी अन्य जार की तरह तैनात किया जाता है।

एक परियोजना, जहां इस विभिन्न प्लेटफार्मों के लिए कई .so साथ किया जाता है, का एक उदाहरण https://github.com/peter-lawrey/Java-Thread-Affinity

मुख्य वर्ग रनटाइम पर अपने पुस्तकालयों खोल करने के लिए पर है https://github.com/peter-lawrey/Java-Thread-Affinity/blob/master/src/main/java/com/higherfrequencytrading/affinity/impl/NativeAffinity.java

+0

आप इसे कैसे तैनात करते हैं और सुनिश्चित करें कि देशी पुस्तकालय सही LIBRARY_PATH में रखा गया है? – jbx

+0

ऐसा नहीं होता है, यह 'java.io.tmpdir' की उप निर्देशिका में लोड होता है और इसे पूर्ण पथ नाम से लोड करता है। –

0

देखने के लिए एक विकल्प के रूप है आप उन्हें मेवेन में जार के रूप में स्टोर कर सकते हैं लेकिन बिल्ड समय पर उन्हें अनपैक कर सकते हैं: http://www.buildanddeploy.com/node/17

maven-nativedependencies-plugin प्लगइन स्वचालित रूप से आपके लिए यह करेगा, जब तक आप उनके नामकरण सम्मेलन का पालन करते हैं।

8

मेरे दृष्टिकोण: sqlite3-3.7.9-linux-x86_64.so:

इस तरह, मंच विशिष्ट वर्गीकारक साथ रिपोजिटरी को .so फ़ाइलों रखो। सभी आवश्यक प्लेटफार्मों के लिए .so निर्भरता जोड़ें:

<dependency> 
    <groupId>de.ch-werner</groupId> 
    <artifactId>sqlite-jdbc</artifactId> 
    <version>3.7.9</version> 
    <type>so</type> 
    <classifier>linux-x86_64</classifier> 
</dependency> 

इस Maven विधानसभा प्लगइन config उपयोग आप के lib/native निर्देशिका में सभी देशी libs डाल करने के लिए जिला:

<dependencySet> 
    <outputDirectory>lib/native</outputDirectory> 
    <outputFileNameMapping>${artifact.artifactId}${dashClassifier?}.${artifact.extension}</outputFileNameMapping> 
    <unpack>false</unpack> 
    <useProjectArtifact>false</useProjectArtifact> 
    <useStrictFiltering>false</useStrictFiltering> 
    <includes> 
     <include>*:*:dll:*</include> 
     <include>*:*:so:*</include> 
     <include>*:*:jnilib:*</include> 
    </includes> 
</dependencySet>  

उपयोग this class एप्लिकेशन स्टार्टअप पर libs (लोड करने के लिए GNU triplets पर वर्गीकरण नाम बदलने की योजना):

CtzJniUtils.loadJniLibsFromStandardPath(Launcher.class, "sqlite3") 
+0

सामान्य एमवीएन इंस्टॉल कमांड के साथ मंच विशिष्ट क्लासिफायरफायर के साथ .so जोड़ना संभव है? – jbx

+0

@jbx शायद आपका मतलब है 'एमवीएन तैनाती'? मैंने इसे केवल मानव देवताओं द्वारा बनाए गए जावा डेप के लिए इस्तेमाल किया। हमारे जेएनआई डिप्टी मैवेन के बिना बनाए जाते हैं, और सरल बैश स्क्रिप्ट द्वारा कर्ल के साथ मेवेन रिपोजिटरी में लोड होते हैं। – alexkasko

+0

नहीं मेरा मतलब एमवीएन इंस्टॉल था। मैं आमतौर पर तीसरे पक्ष के पुस्तकालयों के लिए ऐसा करता हूं जो मैवेन रिपोजिटरी में नहीं हैं। http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html इसलिए अनिवार्य रूप से मैं जो करना चाहता हूं वह तीसरी पार्टी जार के साथ .so शामिल है। – jbx

संबंधित मुद्दे