2013-02-19 42 views
6

के लिए एसबीटी असेंबली का उपयोग करते समय जार के भीतर हाइपरिक सिगार लाइब्रेरी समेत मैं एसबीटी के साथ एक स्कैला प्रोजेक्ट का निर्माण कर रहा हूं और एसबीटी-असेंबली प्लगइन के साथ एक वसा जार बना रहा हूं। मैं build.sbt पर निम्नलिखित जोड़कर अप्रबंधित जार (जैसे सिगार जार) जोड़ सकता हूं।स्कैला प्रोजेक्ट

unmanagedJars in Compile += 
    file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar") 

हालांकि, जब मैं इस चल कोशिश, मैं निम्न त्रुटि क्योंकि *.so पुस्तकालयों जार में शामिल नहीं हैं मिलता है।

no libsigar-amd64-linux.so in java.library.path 
org.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path 
    at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172) 
    at org.hyperic.sigar.Sigar.<clinit>(Sigar.java:100) 


Exception in thread "main" java.lang.UnsatisfiedLinkError: org.hyperic.sigar.ptql.SigarProcessQuery.create(Ljava/lang/String;)V 
    at org.hyperic.sigar.ptql.SigarProcessQuery.create(Native Method) 
    at org.hyperic.sigar.ptql.ProcessQueryFactory.getQuery(ProcessQueryFactory.java:66) 
    at org.hyperic.sigar.ptql.ProcessFinder.findSingleProcess(ProcessFinder.java:44) 

पुस्तकालयों मैं शामिल करना चाहते हैं lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so में हैं और वे जार के अंदर classpath में एक निर्देशिका से जोड़ा जा करने की जरूरत है। इस तरह एक ही रास्ता मैं के बारे में पता एक मानचित्रण करने के लिए:

resourceDirectory in Compile <<= 
    baseDirectory{ _/"lib/hyperic-sigar-1.6.4/sigar-bin/lib" } 

इस कारण *.so पुस्तकालयों जड़ जार के में जोड़े जाने की नहीं, बल्कि एक विशिष्ट निर्देशिका। मैं अपने जार में क्लासपाथ में निर्देशिका में lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so से मैप करने के लिए संसाधन मानचित्र कैसे निर्दिष्ट कर सकता हूं? मैं जो करने की कोशिश कर रहा हूं उसके लिए शब्दावली क्या है?

+0

कोई विशेष कारण है कि आप "org.fusource"% "सिगार"% "1.6.4" वर्गीकरण ("मूल") का उपयोग क्यों नहीं कर रहे हैं? – OlegYch

+0

@OlegYch, मैं 'build.sbt' में' libraryDependencies + = "org.fusource"% "सिगार"% "1.6.4" 'का उपयोग करने के लिए बदल गया, और मुझे अभी भी वही त्रुटि मिल रही है। –

उत्तर

4

यह मानते हुए कि पेड़ classpath से देशी libs को लोड करने की वास्तव में सक्षम है, इस चाल करना चाहिए:

libraryDependencies += "org.fusesource" % "sigar" % "1.6.4" classifier("native") classifier("") 

अन्यथा, आप मैन्युअल रूप से जार से उन्हें खोल और उचित java.library.path उपलब्ध कराने की आवश्यकता

+0

बाद में 'java.library.path' में दिखेगा। धन्यवाद! –

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

  • कोई संबंधित समस्या नहीं^_^