我正在尝试使用将生成源文件的任务扩展我的构建。 我在project / Build.scala中定义了我的任务(省略了非相关部分):
object ProjectBuild extends Build {
lazy val generateConfiguration = TaskKey[Seq[File]]("generateConfiguration")
lazy val unscopedSettings = Seq(
generateConfiguration <<=
(libraryDependencies, sourceManaged).map { (dependencies, generatedRoot) =>
// here goes implementation
},
sourceGenerators += generateConfiguration.taskValue
)
override lazy val settings = super.settings ++ inConfig(Compile)(unscopedSettings)
}
当我尝试在sbt中导入项目时,我收到以下错误:
[info]从... web / project
加载项目定义对未定义设置的引用:
{。} / compile:sourceManaged from {。} / compile:generateConfiguration (...网站/项目/ Build.scala:19) 你的意思是编译:sourceManaged?
{。} / compile:来自{。} / compile:sourceGenerators的sourceGenerators (...网站/项目/ Build.scala:33) 你的意思是编译:sourceGenerators?
我理解我的问题是因为我可能会引用错误范围的设置。我想,问题出在'this build'({。})中,由于某种原因,这个问题是在这里(据我所知,该设置存在于该轴的全局范围内)。
如何在Scala代码(而不是.sbt)中的Compile配置中正确表达对sourceManaged设置的依赖?
P.S .: sbt 0.13.8
scala 2.11.7
答案 0 :(得分:0)
我似乎自己找到了这个问题。
这不起作用的可能原因是我将自定义设置放入构建中的方式 - 我试图覆盖Build的lazy val settings
。
由于我在Build.scala中描述了我的任务而不是在最终构建定义之前出现的build.sbt,所以似乎尚未定义依赖设置!稍后将默认设置build.sbt。
一旦我将项目中的自定义属性添加到build.sbt,同时在Build.scala中保留了它们的定义,一切都按预期工作。
尽管有关于* .scala和build.sbt之间的覆盖顺序的信息以及复合构建定义的一些简单示例,但它并不那么明显。