将JVM选项传递给SBT中的分叉测试

时间:2014-02-04 14:52:50

标签: sbt

我正在尝试在分叉测试中使用JVM选项,该分区测试在启动之前已在SBT外部设置。我还设置了其他JVM选项:

javaOptions in ThisBuild ++= List("-Xmx3072m")

根据我的理解,基于the SBT documentation提供给SBT流程的JVM选项应该可用于分叉流程:

  

默认情况下,分叉进程使用与构建相同的Java和Scala版本以及当前进程的工作目录和JVM选项。

但是,我似乎无法在分叉测试中检索那些“外部”JVM选项,即System.getProperty("foo")将始终返回null。鉴于我试图传递密码,我不能直接在构建文件中设置它。因此,我的问题是:

  • 是否有SBT任务/密钥来访问传递给运行SBT的JVM的JVM选项?这样我就会尝试将密钥添加到javaOptions

  • 还有其他方法可以将外部Java选项传递给分叉测试吗?

1 个答案:

答案 0 :(得分:2)

您可以使用testGrouping控制您的选项。在我的一个项目下面的copy'n'paste下面。它无需测试即可正确处理分层项目和根项目。选项从javaOptions in runtest.options文件合并。这允许修改参数而无需重新加载项目。该项目的加载时间超过了分钟。因此,我使用test.options使用-Xrunjdwp:transport=dt_ ...

在生产和调试模式之间快速切换
testGrouping in Test <<= (definedTests in Test, javaOptions in run, baseDirectory in LocalRootProject) map { (tests, javaOptions, baseDirectory) ⇒
  if (tests.nonEmpty) {
    val testOptionsFile = baseDirectory / "test.options"
    val externalOptions = if (testOptionsFile.exists()) {
      val source = scala.io.Source.fromFile(testOptionsFile)
      val options = source.getLines().toIndexedSeq
      source.close()
      options
    } else Nil
    tests map { test ⇒
      new Tests.Group(
        name = test.name,
        tests = Seq(test),
        //          runPolicy = Tests.InProcess)
        runPolicy = Tests.SubProcess(javaOptions = javaOptions ++ externalOptions))
    }
  } else {
    Seq(new Tests.Group(
      name = "Empty",
      tests = Seq(),
      runPolicy = Tests.InProcess))
  }
},