【发布时间】: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
【问题讨论】: