2013-02-19 10 views
6

Buduję projekt Scala z sbt i tworzenie słoika z wtyczką sbt-assembly. Mogę dodać niezarządzane słoiki (takie jak słoik Sigar), dodając poniższe do build.sbt.Łącznie z biblioteką Hyperic Sigar w słoiku przy użyciu modułu sbt dla projektu Scala

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

Jednak gdy próbuję to działa, pojawia się następujący błąd, ponieważ biblioteki *.so nie są wliczone w słoiku.

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) 

Biblioteki chcę to są w lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so i muszą być połączone z katalogu w ścieżce klasy w słoiku. Jedynym sposobem, wiem, aby zrobić mapowanie jak to jest:

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

Powoduje biblioteki *.so należy doliczyć do korzenia słoika, ale nie konkretnego katalogu. Jak mogę określić mapę zasobów do mapowania z lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so do katalogu w ścieżce klas w moim słoiku? Jaka jest terminologia dla tego, co próbuję zrobić?

+0

jakiś szczególny powód, dla którego nie używasz "org.fusesource"% "sigar"% "1.6.4" klasyfikatora ("natywny")? – OlegYch

+0

@OlegYch, zmieniłem na using 'libraryDependencies + =" org.fusesource "%" sigar "%" 1.6.4 "' w 'build.sbt', i nadal otrzymuję ten sam błąd. –

Odpowiedz

4

Zakładając, że sigar jest rzeczywiście zdolny do załadunku rodzimych bibliotekami ze ścieżki klasy, to powinno załatwić sprawę:

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

W przeciwnym razie trzeba rozpakować je ze słoika ręcznie i zapewniają prawidłowe java.library.path

+0

Zajmie się później "java.library.path". Dzięki! –

Powiązane problemy