SBT:如何将上层目录中的sbt文件包括到我的build.sbt中?

时间:2019-07-01 16:07:48

标签: scala sbt

我在一个文件夹中有许多相关的sbt项目。它们在Build.sbt中都具有相同的值,例如依赖性。

我想将相同的值从所有sbt文件移至单独的文件。但是不想使用multibuild。只需包含上层目录中的其他一些sbt文件。

例如,我的目录结构如下所示:

MyRepository
  |- Dependencies.sbt
  |- MyProject1
      |- src
      |- Build.sbt
  |- MyProject2
      |- src
      |- Build.sbt

在该示例中,如何在Dependencies.sbt中包含Build.sbt

1 个答案:

答案 0 :(得分:0)

通过在project /中创建普通的.scala文件,在.sbt文件之间重用代码。 project /中的代码将可在.sbt文件中使用。

如果我没记错的话,一个.sbt文件中的定义对于其他.sbt文件是不可见的,至少在较旧的版本中是不可见的。

基本上,解决方案是使用Dependencies.scala而不是Dependencies.sbt并在那里定义公共部分。

检查插图,here

您创建project / Dependencies.scala以便在一处跟踪依赖关系。

    import sbt._

    object Dependencies {
      // Versions
      lazy val akkaVersion = "2.3.8"

      // Libraries
      val akkaActor = "com.typesafe.akka" %% "akka-actor" % akkaVersion
      val akkaCluster = "com.typesafe.akka" %% "akka-cluster" % akkaVersion
      val specs2core = "org.specs2" %% "specs2-core" % "2.4.17"

      // Projects
      val backendDeps =
        Seq(akkaActor, specs2core % Test)
    }

Dependencies对象将在build.sbt中可用。 您需要在import Dependencies._文件中build.sbt

    import Dependencies._

    ThisBuild / organization := "com.example"
    ThisBuild / version      := "0.1.0-SNAPSHOT"
    ThisBuild / scalaVersion := "2.12.8"

    lazy val backend = (project in file("backend"))
      .settings(
        name := "backend",
        libraryDependencies ++= backendDeps
      )