【发布时间】:2014-03-12 18:57:11
【问题描述】:
我实现了一个简单的任务,将一些文件从项目的目标目录复制到其他目录:
lazy val publishFiles = taskKey[Unit]("publishes the files")
lazy val publishFilesTask = publishFiles <<= (projectID, target, streams) map { (id, targetDir, streams) =>
val Sprint = "99"
val DestBaseDir = "/some/folder"
val DestDir = new File(s"$DestBaseDir/Sprint$Sprint/${id.name}")
val log = streams.log
val ScoverageReportDir = "scoverage-report"
val CoberturaFileName = "cobertura.xml"
if (DestDir.exists)
log.error(s"Destination Directory $DestDir exists, exiting ...")
else {
log.info(s"Copying test coverage report to $DestDir ...")
sbt.IO.createDirectory(DestDir)
sbt.IO.copyDirectory(targetDir / ScoverageReportDir, DestDir / ScoverageReportDir, overwrite = false)
sbt.IO.copyFile(targetDir / "coverage-report" / CoberturaFileName, DestDir / CoberturaFileName)
}
}
任务被添加到项目的设置中:
lazy val settings = ... ++ publishFilesTask ++ ..
它有效。
现在我想更改任务以使用新的任务语法(在 sbt 0.13.0 中引入):
lazy val publishFilesTask = taskKey[Unit]("publishes the files")
publishFilesTask := {
val Sprint = "99"
val DestBaseDir = "/some/folder"
val DestDir = new File(s"$DestBaseDir/Sprint$Sprint/${projectID.value.name}")
val log = streams.value.log
val ScoverageReportDir = "scoverage-report"
val CoberturaFileName = "cobertura.xml"
if (DestDir.exists)
log.error(s"Destination Directory $DestDir exists, exiting ...")
else {
log.info(s"Copying test coverage report to $DestDir ...")
sbt.IO.createDirectory(DestDir)
sbt.IO.copyDirectory(target.value / ScoverageReportDir, DestDir / ScoverageReportDir, overwrite = false)
sbt.IO.copyFile(target.value / "coverage-report" / CoberturaFileName, DestDir / CoberturaFileName)
}
}
到目前为止,一切都很好。但我不知道如何将此任务添加到项目中。如果我喜欢旧版本
lazy val settings = ... ++ publishFilesTask ++ ..
我收到此错误:
[error] found : sbt.TaskKey[Unit]
[error] required: scala.collection.GenTraversableOnce[?]
我查看了文档,但没有找到解决此问题的方法。我想这应该很容易... 我正在使用 sbt 0.13.0(目前无法升级到较新版本)并且我的构建脚本是 .scala 构建定义。
【问题讨论】: