作为 Scala 程序调试 build.sbt

Debug build.sbt as a Scala program

如何调试(编译)build.sbt 作为 Scala 程序?

正在处理一个有一段时间没有更新的大型 Scala (sbt) 项目(36 个子项目)。在 build.sbt 上出现一些奇怪的编译错误,这与 sbt API 在 sbt 0.13 和 1.5 之间的变化有关。有些表达式无法编译,我想仔细看看类型。我想把 build.sbt 的文本放在 Scala 文件中,看看为什么它不能编译。

构建(删除了一些部分)使用来自 Linux 命令行的 sbt 工作。但在 IntelliJ 中它全是红色(错误),所有类型都显示为“Any”等。所以我无法弄清楚为什么某些表达式(当前已注释掉)无法编译。

我希望能够做这样的事情(在不同的项目中,为此目的而创建):

SomeFileName.scala
import sbt._ // What should I import here?
import sbt.Keys._

class SomeFileName {
    // paste the contents of the build.sbt file here
}

我希望这个 SomeFileName.scala 是一个普通的 Scala class。也许它会有编译错误,我将能够准确地看到它们是什么,sbt API 是什么,并找出我的构建文件有什么问题。

我该怎么做?

想通了。让事情变得困难的表达是我们有一个有条件的子项目列表。解决方案是对它们调用 .project,如下所示:

val subProjects = if (...) Seq(proj1, proj2) else Seq(proj3, proj4)
lazy val root =  (project in file("."))
  .aggregate(subProjects.map(x => x.project) : _*)

这在 build.sbt 中工作正常,即 build.sbt 编译。

我发现将 build.sbt 的内容粘贴到问题中所示的 Scala 文件中很有用(作为调试工具)。