2013-02-19 6 views
6

Я строю проект Scala с sbt и создаю толстую банку с плагином sbt-assembly. Я могу добавить неуправляемые банки (например, банку Сигара), добавив следующее к build.sbt.Включая библиотеку Hyperic Sigar в банке при использовании сборки sbt для проекта Scala

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, и они должны быть связаны с каталога в пути к классам в банке. Единственный способ, которым я знаю, чтобы сделать отображение, как это:

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.fusesource»% «sigar»% «1.6.4» classifier («native»)? – OlegYch

+0

@OlegYch, я изменил использование 'libraryDependencies + =" org.fusesource "%" sigar "%" 1.6.4 "' in 'build.sbt', и я все еще получаю ту же ошибку. –

ответ

4

Предполагая, что SIGAR действительно способна загружать собственную LIBS из пути к классам, это следует сделать трюк:

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

В противном случае, вам нужно распаковать их из банки вручную и обеспечить надлежащее java.library.path

+0

Позже посмотрим на «java.library.path». Благодаря! –