project/Dependencies.scala (120 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* license agreements; and to You under the Apache License, version 2.0:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* This file is part of the Apache Pekko project, which was derived from Akka.
*/
/*
* Copyright (C) 2009-2020 Lightbend Inc. <https://www.lightbend.com>
*/
import sbt._
import sbt.Keys._
import scala.language.implicitConversions
object Dependencies {
import DependencyHelpers._
val jacksonDatabindVersion = "2.18.4"
val jacksonXmlVersion = jacksonDatabindVersion
val junitVersion = "4.13.2"
val h2specVersion = "2.6.0"
val h2specName = s"h2spec_${DependencyHelpers.osName}_amd64"
val h2specExe = "h2spec" + DependencyHelpers.exeIfWindows
val h2specArtifactExtension = if (h2specExe.endsWith("exe")) "zip" else "tar.gz"
val h2specUrl =
s"https://github.com/summerwind/h2spec/releases/download/v$h2specVersion/$h2specName.$h2specArtifactExtension"
val scalaTestVersion = "3.2.19"
val scalaCheckVersion = "1.18.0"
val scalafixVersion = _root_.scalafix.sbt.BuildInfo.scalafixVersion // grab from plugin
val scala212Version = "2.12.20"
val scala213Version = "2.13.16"
val scala3Version = "3.3.5"
val allScalaVersions = Seq(scala213Version, scala212Version, scala3Version)
val Versions = Seq(
crossScalaVersions := allScalaVersions,
scalaVersion := allScalaVersions.head)
object Provided {
val jsr305 = "com.google.code.findbugs" % "jsr305" % "3.0.2" % "provided"
val scalaReflect = ScalaVersionDependentModuleID.fromPF {
case v if v.startsWith("2.") => "org.scala-lang" % "scala-reflect" % v % "provided"
}
}
object Compile {
val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "2.3.0"
// For pekko-http spray-json support
val sprayJson = "io.spray" %% "spray-json" % "1.3.6"
// For pekko-http-jackson support
val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % jacksonDatabindVersion
// For pekko-http-testkit-java
val junit = "junit" % "junit" % junitVersion
val caffeine = "com.github.ben-manes.caffeine" % "caffeine" % "2.9.3"
val scalafix = "ch.epfl.scala" %% "scalafix-core" % Dependencies.scalafixVersion
val parboiled = "org.parboiled" %% "parboiled" % "2.5.1"
object Docs {
val sprayJson = Compile.sprayJson % "test"
val gson = "com.google.code.gson" % "gson" % "2.13.1" % "test"
val jacksonXml = "com.fasterxml.jackson.dataformat" % "jackson-dataformat-xml" % jacksonXmlVersion % "test"
val reflections = "org.reflections" % "reflections" % "0.10.2" % "test"
}
object Test {
val sprayJson = Compile.sprayJson % "test"
val junit = Compile.junit % "test"
val specs2 = "org.specs2" %% "specs2-core" % "4.21.0"
val munit = "org.scalameta" %% "munit" % "1.1.1"
val scalacheck = "org.scalacheck" %% "scalacheck" % scalaCheckVersion % "test"
val junitIntf = "com.github.sbt" % "junit-interface" % "0.13.3" % "test"
val scalatest = "org.scalatest" %% "scalatest" % scalaTestVersion % "test"
val scalatestplusScalacheck = "org.scalatestplus" %% "scalacheck-1-18" % (scalaTestVersion + ".0") % "test"
val scalatestplusJUnit = "org.scalatestplus" %% "junit-4-13" % (scalaTestVersion + ".0") % "test"
// HTTP/2
val h2spec = ("io.github.summerwind" % h2specName % h2specVersion % "test").from(h2specUrl)
}
}
import Compile._
lazy val l = libraryDependencies
lazy val parsing = Seq(
DependencyHelpers.versionDependentDeps(
Dependencies.Provided.scalaReflect))
lazy val httpCore = l ++= Seq(
parboiled,
Test.sprayJson, // for WS Autobahn test metadata
Test.scalatest, Test.scalatestplusScalacheck, Test.scalatestplusJUnit, Test.junit)
lazy val httpCaching = l ++= Seq(
caffeine,
Provided.jsr305,
Test.scalatest)
lazy val httpCors = l ++= Seq(Test.scalatest)
lazy val http = Seq()
lazy val http2Tests = l ++= Seq(Test.h2spec)
lazy val httpTestkit = Seq(
versionDependentDeps(
Test.specs2 % "provided; test"),
l ++= Seq(
Test.junit, Test.junitIntf, Compile.junit % "provided",
Test.scalatest.withConfigurations(Some("provided; test"))))
lazy val httpTestkitMunit =
l ++= Seq(Test.munit % "provided; test")
lazy val httpTests = l ++= Seq(Test.junit, Test.scalatest, Test.junitIntf)
lazy val httpXml = Seq(
versionDependentDeps(scalaXml),
libraryDependencies += Test.scalatest)
lazy val httpSprayJson = Seq(
versionDependentDeps(sprayJson),
libraryDependencies += Test.scalatest)
lazy val httpJackson = l ++= Seq(jacksonDatabind, Test.scalatestplusJUnit, Test.junit, Test.junitIntf)
lazy val docs = l ++= Seq(Docs.sprayJson, Docs.gson, Docs.jacksonXml, Docs.reflections)
}
object DependencyHelpers {
case class ScalaVersionDependentModuleID(modules: String => Seq[ModuleID]) {
def %(config: String): ScalaVersionDependentModuleID =
ScalaVersionDependentModuleID(version => modules(version).map(_ % config))
}
object ScalaVersionDependentModuleID {
implicit def liftConstantModule(mod: ModuleID): ScalaVersionDependentModuleID = versioned(_ => mod)
def versioned(f: String => ModuleID): ScalaVersionDependentModuleID = ScalaVersionDependentModuleID(v => Seq(f(v)))
def fromPF(f: PartialFunction[String, ModuleID]): ScalaVersionDependentModuleID =
ScalaVersionDependentModuleID(version => if (f.isDefinedAt(version)) Seq(f(version)) else Nil)
}
/**
* Use this as a dependency setting if the dependencies contain both static and Scala-version
* dependent entries.
*/
def versionDependentDeps(modules: ScalaVersionDependentModuleID*): Def.Setting[Seq[ModuleID]] =
libraryDependencies ++= scalaVersion(version => modules.flatMap(m => m.modules(version))).value
val ScalaVersion = """\d\.\d+\.\d+(?:-(?:M|RC)\d+)?""".r
val nominalScalaVersion: String => String = {
// matches:
// 2.12.0-M1
// 2.12.0-RC1
// 2.12.0
case version @ ScalaVersion() => version
// transforms 2.12.0-custom-version to 2.12.0
case version => version.takeWhile(_ != '-')
}
// OS name for Go binaries
def osName: String = {
val os = System.getProperty("os.name").toLowerCase()
if (os.startsWith("mac")) "darwin"
else if (os.startsWith("win")) "windows"
else "linux"
}
def exeIfWindows: String = {
if (osName.startsWith("win")) ".exe"
else ""
}
}