我正在使用sbt构建Scala项目,并使用sbt程序集插件创建一个胖jar。我可以通过向build.sbt添加以下内容来添加非托管jar(例如Sigar )。
unmanagedJars in Compile +=
file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar")但是,当我尝试运行这个程序时,我会得到以下错误,因为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中类路径中的目录的资源映射?我想做的事情的术语是什么?
发布于 2013-03-22 02:34:28
假设sigar确实能够从类路径中加载本机库,这应该可以做到:
libraryDependencies += "org.fusesource" % "sigar" % "1.6.4" classifier("native") classifier("")否则,您需要手动从jar中解压它们,并提供适当的java.library.path。
https://stackoverflow.com/questions/14966414
复制相似问题