0

我重新定义了我的测试以提供从配置到测试套件的一些参数:

这是我的 Build.scala 的摘录:

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  val myProjectTest = Def.task {
    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306 ").value
  }
}

这工作正常。

现在,我想给我的测试套件起这样一个工件的名称:

val myProjectTest = Def.task {
  val art = (Keys.artifactPath in (Compile, packageBin)).value

  (testOnly in Test).toTask(" tests.Suites -- " +
    s"-Dartifact=${art.getCanonicalPath} " +
    s"-Ddbserver=localhost " +
    s"-Ddbport=3306").value
}

但它显示以下错误消息:

[error] /tmp/aa/project/Build.scala:17: Illegal dynamic reference: art
[error]     s"-Dartifact=${art.getCanonicalPath} " +
[error]                    ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

我对 SBT 内部结构、宏、任务依赖图有所了解,我什至设法使用范围解决了我的一些任务。在这里,我尝试使用 map 或 flatMap on(Keys.artifactPath in (Compile, packageBin))但无法达到预期的结果。每当我尝试访问时,.value我都会得到Illegal dynamic reference.

请指导我。我只需要将任务的值传递给其他任务(inputKey)参数。

SBT 版本:0.13.5

4

2 回答 2

0

我从未见过通过.toTask.

你想看看是否testOptions in Test适合你吗?请参阅测试文档的选项部分。

于 2015-04-29T11:56:13.193 回答
0

通过反复试验,我最终完成了我想要的Def.taskDyn(动态任务):

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  lazy val myProjectTest = Def.taskDyn {
    val art = (Keys.artifactPath in (Compile, packageBin)).value

    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Dartifact=${art.getCanonicalPath} " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306")
  }
}
于 2015-04-29T13:57:38.360 回答