sbt:有没有更好的方法来构建大型build.sbt文件

时间:2015-11-06 12:00:44

标签: scala build sbt

问题描述:大型sbt文件

我们当前build.sbt跨越250多行。

我们有两个问题:

可读性

当前的数据和评论分组方法:

// Plugins ///////////////////////////////////////////////////

enablePlugins(DockerPlugin)

// basic configuration : projects ///////////////////////////
name := """projectName"""

lazy val projectName =
 (project in file(".")).....

逻辑重用

我们有一些配置逻辑,我们希望在不同的项目之间共享。

问题

有没有办法包含其他*.sbt个文件? 或者你有一个建议如何解决这个问题而不是求助于写一个sbt插件

2 个答案:

答案 0 :(得分:5)

您可以做的一件事是将部分构建信息分解为项目目录中的scala文件。

E.g。在我们的构建中,我们在项目目录中有一个 Dependencies.scala 文件,其中包含各个项目的所有依赖项:

object Dependencies {

  val akka_actor = "com.typesafe.akka" %% "akka-actor" % "2.3.13"

  // ...
}

然后可以从build.sbt:

导入
import Dependencies._

lazy val foo = Project(...) dependsOn (akka_actor, ...)

您还可以将任务和命令放入项目目录中的对象中。

更新:在寻找有关如何组织构建的灵感时,我经常做的一件事是查看复杂,高调的scala项目(例如akka)的构建。如您所见,他们已将大量逻辑移动到project directory中的scala文件中。构建本身在AkkaBuild.scala中定义。

答案 1 :(得分:4)

有没有办法包含其他*.sbt个文件?

是的,您只需将build.sbt文件的一部分放入项目根目录中的其他*.sbt文件中即可。 SBT选取所有*.sbt个文件并将它们合并在一起,因为只有一个大文件。