如何在SBT中使用ForkOptions更改工作目录以在子项目中进行测试?

Maw*_*Pls 5 scala sbt

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

问题是,取决于我是通过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的多项目构建中获取此功能的指导?

Maw*_*Pls 0

解决方案是为根 build.sbt 中的项目定义提供以下设置。

lazy val yourProject = project.settings(
    fork := true,
    baseDirectory in test := file("yourProject")
)
Run Code Online (Sandbox Code Playgroud)

这些会导致 JVM 分叉该子项目中的测试,并将工作目录更改为该子项目的基础目录。