Skip to content

Commit

Permalink
=pro Cleaner way to declare Scala Version dependent dependencies
Browse files Browse the repository at this point in the history
Port of PR akka#15887 to master
  • Loading branch information
bantonsson committed Sep 16, 2014
1 parent 0d599ed commit bb75040
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
2 changes: 1 addition & 1 deletion akka-persistence/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Unidoc.javadocSettings

OSGi.persistence

libraryDependencies ++= Dependencies.persistence
Dependencies.persistence

MimaKeys.previousArtifact := akkaPreviousArtifact("akka-persistence-experimental")

Expand Down
2 changes: 1 addition & 1 deletion akka-remote-tests/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Unidoc.scaladocSettings

MultiNode.multiJvmSettings

libraryDependencies ++= Dependencies.remoteTests
Dependencies.remoteTests

// disable parallel tests
parallelExecution in Test := false
Expand Down
41 changes: 35 additions & 6 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import sbt._

object Dependencies {

import DependencyHelpers._
import DependencyHelpers.ScalaVersionDependentModuleID.post210Dependency

object Versions {
val scalaVersion = sys.props.get("akka.scalaVersion").getOrElse("2.10.4")
val scalaStmVersion = sys.props.get("akka.build.scalaStmVersion").getOrElse("0.7")
Expand Down Expand Up @@ -70,7 +73,7 @@ object Dependencies {
val karafExam = "org.apache.karaf.tooling.exam" % "org.apache.karaf.tooling.exam.container" % "2.3.1" % "test" // ApacheV2
// mirrored in OSGi sample
val paxExam = "org.ops4j.pax.exam" % "pax-exam-junit4" % "2.6.0" % "test" // ApacheV2
val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.1" % "test"
val scalaXml = post210Dependency("org.scala-lang.modules" %% "scala-xml" % "1.0.1" % "test")

// metrics, measurements, perf testing
val metrics = "com.codahale.metrics" % "metrics-core" % "3.0.1" % "test" // ApacheV2
Expand All @@ -83,8 +86,6 @@ object Dependencies {

import Compile._

val scalaXmlDepencency = (if (Versions.scalaVersion.startsWith("2.10")) Nil else Seq(Test.scalaXml))

val actor = Seq(config)

val testkit = Seq(Test.junit, Test.scalatest) ++ Test.metricsAll
Expand All @@ -93,16 +94,15 @@ object Dependencies {

val remote = Seq(netty, protobuf, uncommonsMath, Test.junit, Test.scalatest)

val remoteTests = Seq(Test.junit, Test.scalatest) ++ scalaXmlDepencency
val remoteTests = deps(Test.junit, Test.scalatest, Test.scalaXml)

val cluster = Seq(Test.junit, Test.scalatest)

val slf4j = Seq(slf4jApi, Test.logback)

val agent = Seq(scalaStm, Test.scalatest, Test.junit)

val persistence = Seq(levelDB, levelDBNative, protobuf, Test.scalatest, Test.junit, Test.commonsIo) ++
scalaXmlDepencency
val persistence = deps(levelDB, levelDBNative, protobuf, Test.scalatest, Test.junit, Test.commonsIo, Test.scalaXml)

val persistenceTck = Seq(Test.scalatest.copy(configurations = Some("compile")), Test.junit.copy(configurations = Some("compile")))

Expand Down Expand Up @@ -132,3 +132,32 @@ object Dependencies {

val multiNodeSample = Seq(Test.scalatest)
}

object DependencyHelpers {

import sbt.Keys._

case class ScalaVersionDependentModuleID(val modules: String => Seq[ModuleID]) {
def %(config: String): ScalaVersionDependentModuleID =
ScalaVersionDependentModuleID(version => modules(version).map(_ % config))
}

object ScalaVersionDependentModuleID {
implicit def liftConstantModule(mod: ModuleID): ScalaVersionDependentModuleID =
ScalaVersionDependentModuleID(_ => Seq(mod))

def fromPF(f: PartialFunction[String, ModuleID]): ScalaVersionDependentModuleID =
ScalaVersionDependentModuleID(version => if (f.isDefinedAt(version)) Seq(f(version)) else Nil)

def post210Dependency(moduleId: ModuleID): ScalaVersionDependentModuleID = ScalaVersionDependentModuleID.fromPF {
case version if !version.startsWith("2.10") => moduleId
}
}

/**
* Use this as a dependency setting if the dependencies contain both static and Scala-version
* dependent entries.
*/
def deps(modules: ScalaVersionDependentModuleID*) =
libraryDependencies <++= scalaVersion(version => modules.flatMap(m => m.modules(version)))
}

0 comments on commit bb75040

Please sign in to comment.