我正在 SBT 中创建一个任务,该任务将创建格式正确的类路径,但当我尝试编译
时,出现未定义的设置错误。该错误不足以告诉我哪些设置未定义:
[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)
)
}
最佳答案
三件事:
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) 您应该选择要从中提取类路径的配置。选项:
- 运行时:包括项目的已编译类+资源目录和依赖项
- 编译:仅包含用于编译项目的依赖项
- 测试:包括测试时使用的所有依赖项(包括项目本身)
你之前的内容相当于Compile中的fullClasspath
IIRC。
希望有帮助!
关于sbt - 引用 SBT 中自定义任务的未定义设置错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22301405/