如何在SBT中使用ForkOptions来更改子项目中的测试工作目录?

时间:2015-07-31 02:55:07

标签: scala sbt

我目前有一个多项目SBT构建,其下有2个项目,其中一个项目依赖于另一个项目。从属的测试需要从其工作目录下的某个目录结构加载文件。它使用配置文件中的相对路径来指定此目录结构。

问题在于,取决于我是通过我的IDE运行此测试(在子项目级别具有工作目录)还是在SBT伞形项目级别(在伞级别的工作目录)运行此功能我的测试是通过相对路径加载这个文件并成功。

我需要使用相对路径,以便其他开发此项目的开发人员可以使用开箱即用的签入代码,并且在项目的两个级别复制目录结构和包含的文件是不可能的。我真正需要做的是直接SBT在进行测试时将工作目录移动到子项目中,这样无论测试从何处开始,目录结构都可以保持不变。

SBT提供了一个ForkOptions类(http://www.scala-sbt.org/0.13.0/api/index.html#sbt.ForkOptions),在此处进一步描述:http://www.scala-sbt.org/0.13/docs/Forking.html位于页面底部,通过它可以为分叉的JVM提供工作目录。但没有给出如何在根build.sbt中设置配置或向测试任务提供ForkOptions实例的好例子。

有没有人有使用此课程的经验,和/或是否有人可以提供一些指导,以便从SBT中的多项目构建中获取此功能?

1 个答案:

答案 0 :(得分:0)

解决方案是在根build.sbt。

中为项目定义提供以下设置
lazy val yourProject = project.settings(
    fork := true,
    baseDirectory in test := file("yourProject")
)

这些导致JVM为该子项目中的测试进行派生,并将工作目录更改为该子项目的基础。