如何在 SBT 多项目中共享自定义任务

rei*_*kje 3 scala sbt

我有一个项目设置为 SBT 多重构建。看起来像这样:

- project
   Dependencies.scala
- core
   build.sbt
- server
   build.sbt
build.sbt
Run Code Online (Sandbox Code Playgroud)

我想用作Dependencies.scala子项目之间共享的库版本号的容器。

sealed trait Dependencies {
  val commonsIo = "2.4"
}

object DependencyVersions extends Dependencies
Run Code Online (Sandbox Code Playgroud)

在根 build.sbt 中,我添加了一个Setting分配给每个子项目的文件。

lazy val dependencies = settingKey[Dependencies]("versions")

val defaultSettings = Defaults.coreDefaultSettings ++ Seq(
    dependencies := DependencyVersions)

def projectFolder(name: String, theSettings: Seq[Def.Setting[_]] = Nil) = Project(name, file(name), settings = theSettings)

lazy val core = projectFolder("core", defaultSettings)
Run Code Online (Sandbox Code Playgroud)

我无法访问dependencies中的设置core/build.sbt

"commons-io" % "commons-io" % dependencies.value.commonsIo, <-- doesn't work
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

cch*_*tep 5

object Common extends AutoPlugin您可以在(in )中定义通用设置(依赖项)project/Common.scala,然后.enablePlugin(Common)在子项目描述符上使用(请参阅Anorm)。