我在Akka有一个生产应用程序,我从以下选项开始:
-Djava.library.path="./native/"
(native
目录包含一个库libsigar-amd64-linux.so
),一切都很好。
当我输入sbt test
时,我面临以下错误:
[executorTest-akka.actor.default-dispatcher-13] DEBUG Sigar - no libsigar-amd64-linux.so in java.library.path
org.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path
我尝试使用以下内容修改build.sbt
libraryDependencies in Test ++= file("native/libsigar-amd64-linux.so")
但它没有帮助。
答案 0 :(得分:3)
JVM只会从java.library.path
加载库。 libraryDependencies
用于声明托管依赖项(例如jars)。
> help libraryDependencies
Declares managed dependencies.
您需要为测试指定上述java.library.path
。你有两个选择。
您可以在分叉的JVM中运行测试,将以下行添加到build.sbt
javaOptions in Test += s"""-Djava.library.path=${baseDirectory.value / ".native"}"""
fork in Test := true
其次你可以运行sbt(注意这将覆盖整个过程的java.library.path
),如果你不进行测试,将在测试中显示
sbt -Djava.library.path=./native
答案 1 :(得分:2)
如果使用分叉测试运行,则需要将-Djava.library.path
传递给运行测试的jvm,您可以在sbt-config中使用以下内容执行此操作:
javaOptions in Test += "-Djava.library.path=\"./native/\""
如果不使用分叉测试运行,测试将在sbt-jvm中运行,您需要使用-Djava.library.path
环境变量将SBT_OPTS
传递给该jvm。