本頁討論建置結構的組織。
請先閱讀入門指南中的先前頁面,特別是您需要了解 build.sbt、任務圖、函式庫依賴 和 多專案建置,然後再閱讀此頁面。
build.sbt
隱藏了 sbt 的實際運作方式。sbt 建置是使用 Scala 程式碼定義的。該程式碼本身也必須建置。有什麼比使用 sbt 更好的方式?
project
目錄是您建置中的另一個建置,它知道如何建置您的建置。為了區分建置,我們有時使用術語適當建置來指稱您的建置,並使用元建置來指稱 project
中的建置。元建置中的專案可以執行任何其他專案可以執行的操作。您的建置定義是一個 sbt 專案。
而且它們是層層遞迴的。如果您願意,您可以透過建立 project/project/
目錄來調整建置定義專案的建置定義。
這是一個說明。
hello/ # your build's root project's base directory
Hello.scala # a source file in your build's root project
# (could be in src/main/scala too)
build.sbt # build.sbt is part of the source code for
# meta-build's root project inside project/;
# the build definition for your build
project/ # base directory of meta-build's root project
Dependencies.scala # a source file in the meta-build's root project,
# that is, a source file in the build definition
# the build definition for your build
assembly.sbt # this is part of the source code for
# meta-meta-build's root project in project/project;
# build definition's build definition
project/ # base directory of meta-meta-build's root project;
# the build definition project for the build definition
MetaDeps.scala # source file in the root project of
# meta-meta-build in project/project/
別擔心! 大部分時候您不需要所有這些。但是了解原理可能會有所幫助。
順帶一提:任何時候使用以 .scala
或 .sbt
結尾的檔案時,將它們命名為 build.sbt
和 Dependencies.scala
只是慣例。這也意味著允許多個檔案。
使用 project
底下的 .scala
檔案會成為建置定義一部分的事實的一種方式是建立 project/Dependencies.scala
,以便在一個地方追蹤依賴。
import sbt._
object Dependencies {
// Versions
lazy val akkaVersion = "2.6.21"
// Libraries
val akkaActor = "com.typesafe.akka" %% "akka-actor" % akkaVersion
val akkaCluster = "com.typesafe.akka" %% "akka-cluster" % akkaVersion
val specs2core = "org.specs2" %% "specs2-core" % "4.20.0"
// Projects
val backendDeps =
Seq(akkaActor, specs2core % Test)
}
Dependencies
物件將在 build.sbt
中可用。為了更方便使用其中定義的 val
,請在您的 build.sbt 檔案中匯入 Dependencies._
。
import Dependencies._
ThisBuild / organization := "com.example"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.12.18"
lazy val backend = (project in file("backend"))
.settings(
name := "backend",
libraryDependencies ++= backendDeps
)
當您有一個正在變大的多專案建置,並且想要確保子專案具有一致的依賴時,此技術非常有用。
.scala
檔案 在 .scala
檔案中,您可以撰寫任何 Scala 程式碼,包括最上層的類別和物件。
建議的方法是在多專案 build.sbt
檔案中定義大多數設定,並使用 project/*.scala
檔案來執行任務或共用值(例如金鑰)。.scala
檔案的使用也取決於您或您的團隊對 Scala 的熟悉程度。
對於更進階的使用者,組織建置的另一種方式是在 project/*.scala
中定義一次性的 自動外掛程式。透過定義觸發的外掛程式,自動外掛程式可以用作跨所有子專案注入自訂任務和命令的便捷方法。