【问题标题】:How to reference sourceManaged setting from Build.scala如何从 Build.scala 中引用 sourceManaged 设置
【发布时间】:2016-06-28 12:48:34
【问题描述】:

我正在尝试使用将生成源文件的任务扩展我的构建。 我正在像这样在 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 来自 {.}/compile:generateConfiguration (...web/project/Build.scala:19) 你是说 compile:sourceManaged 吗?

{.}/compile:sourceGenerators 来自 {.}/compile:sourceGenerators (...web/project/Build.scala:33) 你是说 compile:sourceGenerators 吗?

我知道我的问题是因为我可能引用了错误范围的设置。我想,问题出在“此构建”({.}) 之内,由于某种原因,此处已预先设置(据我了解,该设置存在于该轴的全局范围内)。

我应该如何在 Scala 代码(不是 .sbt)的编译配置中正确表达对 sourceManaged 设置的依赖?

附: sbt 0.13.8

斯卡拉 2.11.7

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    我似乎自己发现了问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多