如何声明对本机.so库的依赖性以进行测试?

时间:2014-06-24 11:29:37

标签: scala sbt akka

我在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")

但它没有帮助。

2 个答案:

答案 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。

相关问题