首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sbt 0.13中动态获取子项目列表

如何在sbt 0.13中动态获取子项目列表
EN

Stack Overflow用户
提问于 2018-12-29 01:05:56
回答 1查看 224关注 0票数 1

如何以编程方式(在build.sbt中)找到SBT0.13中当前根项目的所有子项目?(我还没有尝试过Project.componentProjects,因为它是SBT1.0中的新特性)。

代码语言:javascript
复制
lazy val root = (project in file(".") ... )

val myTask = taskKey[Unit]("some description")

myTask := {
  val masterRoot = baseDirectory.value
  // This does not work
  // val subProjects: Seq[ProjectReference] = root.aggregate
  // So I tried to specify the subproject list explicitly; still does not work
  val subProjects = Seq[Project](subPrj1)
  subProjects.foreach { subproject =>
    // All of this works if the "subproject" is hard-coded to "subPrj1"
    val subprojectTarget = target.in(subproject).value / "classes"
    val cp = (dependencyClasspath in(subproject, Compile, compile)).value
  }
}

收到以下错误:

代码语言:javascript
复制
build.sbt: error: Illegal dynamic reference: subproject
    val subprojectTarget = target.in(subproject).value / "classes"
                                     ^
build.sbt: error: Illegal dynamic reference: subproject
    val cp = (dependencyClasspath in(subproject, Compile, compile)).value
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-02 10:53:39

您可以通过buildStructure.value.allProjectRefs访问所有子项目的列表。

你的问题的另一部分是一个令人敬畏的问题,我也经常遇到这个问题。通过首先创建List[Task[A],然后使用递归函数将其提升到Task[List[A]]中,我能够解决此类问题。

代码语言:javascript
复制
def flattenTasks[A](tasks: Seq[Def.Initialize[Task[A]]]): Def.Initialize[Task[List[A]]] =
  tasks.toList match {
    case Nil => Def.task { Nil }
    case x :: xs => Def.taskDyn {
      flattenTasks(xs) map (x.value :: _)
    }
  }

myTask := {
  val classDirectories: List[File] = Def.taskDyn {
    flattenTasks {
      for (project ← buildStructure.value.allProjectRefs)
        yield Def.task { (target in project).value / "classes" }
    }
  }.value
}

我使用过这种方法,例如:utility methods actual usage

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53961938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档