【问题标题】:sbt : Is there a better way of structuring large build.sbt filessbt :有没有更好的方法来构建大型 build.sbt 文件
【发布时间】:2015-11-06 23:07:58
【问题描述】:

问题描述:sbt 文件过大

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

我们有两个问题:

可读性

数据和 cmets 的当前方法分组:

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

enablePlugins(DockerPlugin)

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

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

逻辑复用

我们想在不同项目之间共享一些配置逻辑。

问题

有没有办法包含其他*.sbt文件? 或者你有什么建议不用写一个sbt插件就可以解决这个问题吗?

【问题讨论】:

    标签: scala build sbt


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。这就是我想要的。
    • 另一个问题:有没有办法将它们放在某个子文件夹中,以免污染 rooz 目录?
    • @AndreasNeumann 我不知道。但是您可以调整 sbt 以在其他地方查找这些文件。但是开始使用project/*.scala 文件可能更简单。
    【解决方案2】:

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

    例如在我们的构建中,我们在 project 目录中有一个文件 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 中定义。

    【讨论】:

    • 谢谢。但遗憾的是,依赖关系是问题的最小部分:(而且我还依赖于构建文件中的值。这也是一个想法?
    • 你可以将任何 val 放入项目目录中的 scala 对象中,而不仅仅是依赖项。是您在 build.sbt 中有太多项目的问题吗?在这种情况下,您可以使用项目目录中的 Build.scala 并使用普通 scala 代码的所有代码组织工具。
    • 所以没有办法在语义上停留在.sbt-syntax 中,不得不再次求助于scala-code。
    • 我不知道。我知道的使用 build.sbt 的项目,比如 spire 和 cat,都有很长的 build.sbt 文件。
    • 非常感谢您的回答和支持。
    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多