SBT:使用其他任务值执行任务
SBT: execute task using other task value
我重新定义了我的测试以提供一些从配置到测试套件的参数:
这是我的摘录 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 内部结构、宏、任务依赖图的知识,我什至设法使用范围解决了我的一些任务。在这里我尝试在 (Keys.artifactPath in (Compile, packageBin))
上使用 map 或 flatMap 但无法达到预期的结果。每当我尝试访问 .value
时,我都会得到 Illegal dynamic reference
.
请指导我。我只需要将任务的值传递给其他任务(inputKey)参数即可。
SBT 版本:0.13.5
我从未见过通过 .toTask
指定测试选项。
您想看看 testOptions in Test
是否适合您吗?请参阅测试文档的 Options 部分。
通过反复试验,我最终使用 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")
}
}
我重新定义了我的测试以提供一些从配置到测试套件的参数:
这是我的摘录 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 内部结构、宏、任务依赖图的知识,我什至设法使用范围解决了我的一些任务。在这里我尝试在 (Keys.artifactPath in (Compile, packageBin))
上使用 map 或 flatMap 但无法达到预期的结果。每当我尝试访问 .value
时,我都会得到 Illegal dynamic reference
.
请指导我。我只需要将任务的值传递给其他任务(inputKey)参数即可。
SBT 版本:0.13.5
我从未见过通过 .toTask
指定测试选项。
您想看看 testOptions in Test
是否适合您吗?请参阅测试文档的 Options 部分。
通过反复试验,我最终使用 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")
}
}