【问题标题】:How to auto-aggregate all subprojects in a large SBT project without having to write a large "aggregate"?如何自动聚合大型 SBT 项目中的所有子项目,而无需编写大型“聚合”?
【发布时间】:2016-03-05 01:27:14
【问题描述】:

在我的 SBT 项目中,我有一个明确聚合所有内容的根项目,如下所示:

lazy val root = project.in(file(".")).
  settings(
    name := "awesome_project",
    publishArtifact := false
  ).
  aggregate(
    some_project,
    some_other_project,
    a_cool_library,
    // lots and lots and lots more
  )

因为每当添加新项目时,我都必须明确地将每个项目添加到aggregate,有没有办法自动完成?目前我使用一个shell脚本来查找所有包含lazy valproject的行,输出一个每个名称后面都有一个逗号的列表,然后我将此列表复制粘贴到aggregate中,但我认为必须是一种更简单的方法。

【问题讨论】:

标签: scala sbt


【解决方案1】:

我还没有在项目中尝试过,但你可以检查一下反射在这种情况下是否对你有帮助:

protected val prjs = this.getClass.getDeclaredFields.flatMap { f =>
    f.setAccessible(true)
    f.get(this) match {
      case p@Project => Some(f.asInstanceOf[Project])
      case _ => None
    }
  }.map(x => Project.projectToRef(x))

【讨论】:

  • 如果某些项目字段是惰性的并且尚未初始化,这将出现问题。我也认为您的意思是第四行中的case p: Project => Some(p)
猜你喜欢
  • 2018-03-13
  • 2015-09-05
  • 2015-12-02
  • 1970-01-01
  • 2015-05-28
  • 2014-06-24
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
相关资源
最近更新 更多