我在SBT中创建了一个创建格式正确的类路径的任务,但是当我尝试compile
时,我得到一个未定义的设置错误。该错误不足以告诉我哪些设置未定义:
[error] Reference to undefined setting:
[error]
[error] *:fullClasspath from *:fcp
[error]
这适用于以下构建配置:
import sbt._
import Keys._
object TestBuild extends Build {
override lazy val settings = super.settings ++ Seq(
name := "blah", scalaVersion := "2.10.2"
)
lazy val fcp = TaskKey[String]("fcp", "create formatted classpath")
lazy val fcpTask = fcp <<= fullClasspath map { tasks =>
val cp = tasks.map(_.data.getName + ":")
s"[Classpath]$cp[/Classpath]"
}
lazy val project = Project(
"project", file("."), settings = settings ++ Seq(fcpTask)
)
}
答案 0 :(得分:8)
三件事:
1)您正在删除所有默认设置。创建项目时,您可以指定项目的完整设置列表(就像您当前正在做的那样)或您可以将设置配置添加到默认值。如果将项目定义更改为以下内容,则应该开始工作:
lazy val project = (
Project("project", file("."))
.settings(fcpTask)
)
2)您正在将设置放入Build
本身。如果Project
级别上不存在这些设置,则会查看Build
的设置。但是,name
之类的内容可能会在项目中定义。所以你的完整构建文件看起来像:
import sbt._
import Keys._
object TestBuild extends Build {
lazy val fcp = TaskKey[String]("fcp", "create formatted classpath")
lazy val fcpTask = fcp <<= fullClasspath map { tasks =>
val cp = tasks.map(_.data.getName + ":")
s"[Classpath]$cp[/Classpath]"
}
lazy val project = (
Project("project", file("."))
.settings(name := "blah", scalaVersion := "2.10.2")
.settings(fcpTask)
)
}
3)您应该选择要从中提取类路径的配置。选项:
之前您所拥有的内容相当于fullClasspath in Compile
IIRC。
希望有所帮助!