如何从Build.scala引用sourceManaged设置

时间:2016-03-13 14:14:32

标签: scala sbt

我正在尝试使用将生成源文件的任务扩展我的构建。 我在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

1 个答案:

答案 0 :(得分:0)

我似乎自己找到了这个问题。

这不起作用的可能原因是我将自定义设置放入构建中的方式 - 我试图覆盖Build的lazy val settings。 由于我在Build.scala中描述了我的任务而不是在最终构建定义之前出现的build.sbt,所以似乎尚未定义依赖设置!稍后将默认设置build.sbt。

一旦我将项目中的自定义属性添加到build.sbt,同时在Build.scala中保留了它们的定义,一切都按预期工作。

尽管有关于* .scala和build.sbt之间的覆盖顺序的信息以及复合构建定义的一些简单示例,但它并不那么明显。