将build.sb与项目* .scala文件混合:是否应该在build.sbt中统一?

时间:2017-03-01 00:18:48

标签: scala sbt

使用SBT 0.13.13,我们的构建定义继承自旧项目。目前有一个build.sbt和一些项目/ * .scala文件。这些scala文件遵循相同的模式。这是一个例子:

import sbt._
import sbt.Keys._

object Docs {
  lazy val docTask = TaskKey[Unit]("docPackage", "Generate Scaladoc")

  lazy val settings = Seq(
    docTask := {
      val docs = (doc in Compile).value
      IO.copyDirectory(docs, new java.io.File("src/main/resources/myapp-scaladoc"), overwrite = true)
    },

    docTask := (docTask.dependsOn(doc in Compile)).value
  )
}

Appendix: .scala build definition

  

在以前版本的sbt中,.scala是唯一的创建方式   多项目构建定义

问题:我认为这意味着不鼓励使用单独的项目/ * .scala文件。如果是这样,可以移动这些* .scala文件的代码并将它们全部放在build.sbt中吗?

1 个答案:

答案 0 :(得分:0)

project/中的代码与build.sbt中的代码之间几乎没有功能差异。

将代码放在.scala中的project/文件中的优点是,其中的所有符号都会导入到构建的所有子项目中所有build.sbt文件的命名空间中。这意味着辅助方法,常量,插件或其他Scala代码可以位于一个位置,但可以从任何地方调用。

最终,是否要使用此功能取决于您是希望在单个位置或多个位置配置共享项目。

如果您希望将项目设置完全配置在子项目目录中的单独build.sbt文件中,则可以在project/文件夹中放置共享设置。

如果您确定在根build.sbt文件中配置了共享设置(或者如果您不使用任何子项目build.sbt文件),那么您可以合并所有共享配置。