如何在 SBT 中使用 ForkOptions 更改子项目内测试的工作目录?
How to use ForkOptions in SBT to change working directory for test within subproject?
我目前有一个多项目 SBT 构建,其下有 2 个项目,其中一个依赖于另一个。从属的有一个测试,它需要从其工作目录下的某个目录结构加载文件。它使用配置文件中的相对路径来指定此目录结构。
问题是,取决于我是 运行 通过我的 IDE(工作目录在子项目级别)还是在 SBT 伞式项目级别(工作目录在伞级别)使我的测试通过其相对路径加载此文件并成功的能力有所不同。
我需要使用相对路径,以便从事此项目的其他开发人员可以开箱即用地使用签入的代码,并且在项目的两个级别复制目录结构和包含的文件是不可行的题。我真正需要做的是让SBT在做测试的时候把工作目录移动到子项目中,这样无论从哪里开始测试,目录结构都可以保持不变。
SBT 在页面底部提供了一个 ForkOptions class(http://www.scala-sbt.org/0.13.0/api/index.html#sbt.ForkOptions), further described here: http://www.scala-sbt.org/0.13/docs/Forking.html,似乎可以通过它为要启动的分叉 JVM 提供一个工作目录,但没有给出很好的示例关于如何在根 build.sbt 中设置配置或为测试任务提供 ForkOptions 实例。
有没有人有使用这个的经验class,and/or任何人都可以提供一些关于从 SBT 中的多项目构建中获得这个功能的指导吗?
解决方案是为根目录中的项目定义提供以下设置build.sbt。
lazy val yourProject = project.settings(
fork := true,
baseDirectory in test := file("yourProject")
)
这些导致 JVM 为该子项目中的测试创建分支,并将工作目录更改为该子项目的基目录。
我目前有一个多项目 SBT 构建,其下有 2 个项目,其中一个依赖于另一个。从属的有一个测试,它需要从其工作目录下的某个目录结构加载文件。它使用配置文件中的相对路径来指定此目录结构。
问题是,取决于我是 运行 通过我的 IDE(工作目录在子项目级别)还是在 SBT 伞式项目级别(工作目录在伞级别)使我的测试通过其相对路径加载此文件并成功的能力有所不同。
我需要使用相对路径,以便从事此项目的其他开发人员可以开箱即用地使用签入的代码,并且在项目的两个级别复制目录结构和包含的文件是不可行的题。我真正需要做的是让SBT在做测试的时候把工作目录移动到子项目中,这样无论从哪里开始测试,目录结构都可以保持不变。
SBT 在页面底部提供了一个 ForkOptions class(http://www.scala-sbt.org/0.13.0/api/index.html#sbt.ForkOptions), further described here: http://www.scala-sbt.org/0.13/docs/Forking.html,似乎可以通过它为要启动的分叉 JVM 提供一个工作目录,但没有给出很好的示例关于如何在根 build.sbt 中设置配置或为测试任务提供 ForkOptions 实例。
有没有人有使用这个的经验class,and/or任何人都可以提供一些关于从 SBT 中的多项目构建中获得这个功能的指导吗?
解决方案是为根目录中的项目定义提供以下设置build.sbt。
lazy val yourProject = project.settings(
fork := true,
baseDirectory in test := file("yourProject")
)
这些导致 JVM 为该子项目中的测试创建分支,并将工作目录更改为该子项目的基目录。