我正在尝试在分叉测试中使用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选项传递给分叉测试吗?
答案 0 :(得分:2)
您可以使用testGrouping
控制您的选项。在我的一个项目下面的copy'n'paste下面。它无需测试即可正确处理分层项目和根项目。选项从javaOptions in run
和test.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))
}
},