2013-02-19 49 views
6

我正在用sbt構建一個Scala項目並使用sbt-assembly插件創建了一個胖罐子。我可以通過將以下內容添加到build.sbt來添加非託管罐(如Sigar罐)。在使用sbt程序集進行Scala項目時在jar中包含Hyperic Sigar庫

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,他們需要被鏈接到一個目錄中的jar文件裏的類路徑。我知道的唯一的方式做一個這樣的映射是:

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

這將導致*.so庫被添加到根的jar,但沒有一個特定的目錄。我如何指定資源映射從lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so映射到我的jar中類路徑中的目錄?我想要做什麼的術語?

+0

你爲什麼不使用「org.fusesource」%「sigar」%「1.6.4」classifier(「native」)的任何特定原因? – OlegYch 2013-03-03 18:26:34

+0

@OlegYch,我在'build.sbt'中更改爲使用'libraryDependencies + =「org.fusesource」%「sigar」%「1.6.4」',而且我仍然收到相同的錯誤。 – 2013-03-20 12:01:54

回答

4

假設SIGAR確實能夠從classpath中加載本地庫,這應該做的伎倆:

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

否則,您需要手動從罐子解包,並提供適當的java.library.path

+0

稍後將研究'java.library.path'。謝謝! – 2013-03-22 03:21:49

相關問題