.sbt
建置可以使用 project/*.scala
檔案來補充。當建置檔案變得夠大時,首先要分解出來的是解析器和相依性。
import sbt._
import Keys._
object Resolvers {
val sunrepo = "Sun Maven2 Repo" at "http://download.java.net/maven/2"
val sunrepoGF = "Sun GF Maven2 Repo" at "http://download.java.net/maven/glassfish"
val oraclerepo = "Oracle Maven2 Repo" at "http://download.oracle.com/maven"
val oracleResolvers = Seq(sunrepo, sunrepoGF, oraclerepo)
}
import sbt._
import Keys._
object Dependencies {
val logbackVersion = "0.9.16"
val grizzlyVersion = "1.9.19"
val logbackcore = "ch.qos.logback" % "logback-core" % logbackVersion
val logbackclassic = "ch.qos.logback" % "logback-classic" % logbackVersion
val jacksonjson = "org.codehaus.jackson" % "jackson-core-lgpl" % "1.7.2"
val grizzlyframwork = "com.sun.grizzly" % "grizzly-framework" % grizzlyVersion
val grizzlyhttp = "com.sun.grizzly" % "grizzly-http" % grizzlyVersion
val grizzlyrcm = "com.sun.grizzly" % "grizzly-rcm" % grizzlyVersion
val grizzlyutils = "com.sun.grizzly" % "grizzly-utils" % grizzlyVersion
val grizzlyportunif = "com.sun.grizzly" % "grizzly-portunif" % grizzlyVersion
val sleepycat = "com.sleepycat" % "je" % "4.0.92"
val apachenet = "commons-net" % "commons-net" % "2.0"
val apachecodec = "commons-codec" % "commons-codec" % "1.4"
val scalatest = "org.scalatest" %% "scalatest" % "3.2.17"
}
這些檔案可用於在一個地方管理函式庫相依性。
當您想要實作自訂命令或任務時,您可以透過定義一次性的自動外掛程式來組織您的建置。
import sbt._
import Keys._
import scala.sys.process._
// Shell prompt which show the current project and git branch
object ShellPromptPlugin extends AutoPlugin {
override def trigger = allRequirements
override lazy val projectSettings = Seq(
shellPrompt := buildShellPrompt
)
val devnull: ProcessLogger = new ProcessLogger {
def out(s: => String): Unit = {}
def err(s: => String): Unit = {}
def buffer[T] (f: => T): T = f
}
def currBranch =
("git status -sb" lineStream_! devnull headOption)
.getOrElse("-").stripPrefix("## ")
val buildShellPrompt: State => String = {
case (state: State) =>
val currProject = Project.extract (state).currentProject.id
s"""$currProject:$currBranch> """
}
}
這個自動外掛程式將顯示目前專案名稱和 git 分支。
現在我們將自訂設定和相依性分解到 project/*.scala
中,我們可以在 build.sbt
中使用它們
import Resolvers._
import Dependencies._
// factor out common settings into a sequence
lazy val buildSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.12.18"
)
// Sub-project specific dependencies
lazy val commonDeps = Seq(
logbackcore,
logbackclassic,
jacksonjson,
scalatest % Test
)
lazy val serverDeps = Seq(
grizzlyframwork,
grizzlyhttp,
grizzlyrcm,
grizzlyutils,
grizzlyportunif,
sleepycat,
scalatest % Test
)
lazy val pricingDeps = Seq(
apachenet,
apachecodec,
scalatest % Test
)
lazy val cdap2 = (project in file("."))
.aggregate(common, server, compact, pricing, pricing_service)
.settings(buildSettings)
lazy val common = (project in file("cdap2-common"))
.settings(
buildSettings,
libraryDependencies ++= commonDeps
)
lazy val server = (project in file("cdap2-server"))
.dependsOn(common)
.settings(
buildSettings,
resolvers := oracleResolvers,
libraryDependencies ++= serverDeps
)
lazy val pricing = (project in file("cdap2-pricing"))
.dependsOn(common, compact, server)
.settings(
buildSettings,
libraryDependencies ++= pricingDeps
)
lazy val pricing_service = (project in file("cdap2-pricing-service"))
.dependsOn(pricing, server)
.settings(buildSettings)
lazy val compatct = (project in file("compact-hashmap"))
.settings(buildSettings)