【问题标题】:SBT: Accessing setting values of subprojects in scala buildSBT:在 scala build 中访问子项目的设置值
【发布时间】:2020-04-22 21:30:06
【问题描述】:

我有一个 SBT (0.13.2) 多项目,并且在单独的构建文件中声明了一组子项目,如下所示:

object SubBuilds extends Build {
  lazy val sub_project1 = Project("sub_project1",  file("sub/Project1")).dependsOn(Build.core)
  lazy val sub_project2 = Project("sub_project2", file("sub/Project2")).dependsOn(Build.core)
  ...
}

每个子项目都有自己的build.sbt 文件,可以在其中指定name := "..."

我可以像SubBuilds.projects 一样访问root build 中的项目列表并获得Seq[Project]。它应该具有我希望使用的属性settings: Seq[Def.Setting[_]],但我完全不知道如何从这些属性中获得价值。我可以找到带有键 name 的设置,但它没有像 value 这样的设置。

我怎样才能做到这一点:例如,在 Scala 构建中使用 Project 实例获取 name 属性?

更新: 我应该注意我打算在其他任务中使用它,我尝试了@eugene-yokota 的回答,但它在构建编译期间产生了“非法动态引用”。

object CustomTasks {
  /** Task to display Subprojects */
  val subList = taskKey[Unit]("Display subprojects")

  val subListTask = subList := {
    SubBuilds.projects foreach { a =>
      val v = (name in a).value
      println(s"Subproject ${a.id}, $v")
    }
  }
}

[error] .../project/CustomTasks.scala:164: Illegal dynamic reference: a
[error]       val v = (name in a).value

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    以尤金的回答为基础。正确的解决方案确实是 Scopes,但我猜你用错了。

    代码应该差不多这样

    lazy val nameAndProjectID = Def.task {
        (name.value, projectID.value)
    } 
    
    lazy val subListTask = subList := {
      nameAndProjectID.all(ScopeFilter()).value.foreach { case (name, id) =>
       println(s"Subproject ${id}, $name")
      }
    }
    

    【讨论】:

    • 我对 sbt API 还是很陌生。拜托,您能否根据相关背景详细说明这个想法(更新部分)。如果我有一个项目列表而不是预定义的 projectID 怎么办?
    • 只需将我提供的代码放在object CustomTasks {} 之间就可以了。 projectIDname 只是键(您必须使用 import sbt.Keys._ 导入它们)。查看projectID 是如何定义的scala-sbt.org/0.12.4/sxr/Keys.scala.html#326619
    【解决方案2】:

    Scopes。项目是关键的三个轴之一。您可以从子项目中获取name

    (name in sub_project1).value
    

    【讨论】:

    • 当我在任务中执行此操作时,我得到“非法动态引用”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2019-06-28
    • 2022-01-18
    • 2018-03-25
    • 2016-12-30
    相关资源
    最近更新 更多