From bb75040f883f06475d280d17bf872bfc7c32b57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Antonsson?= Date: Tue, 16 Sep 2014 10:53:04 +0200 Subject: [PATCH] =pro Cleaner way to declare Scala Version dependent dependencies Port of PR #15887 to master --- akka-persistence/build.sbt | 2 +- akka-remote-tests/build.sbt | 2 +- project/Dependencies.scala | 41 +++++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/akka-persistence/build.sbt b/akka-persistence/build.sbt index bf98e02f53..3cab25dd88 100644 --- a/akka-persistence/build.sbt +++ b/akka-persistence/build.sbt @@ -14,7 +14,7 @@ Unidoc.javadocSettings OSGi.persistence -libraryDependencies ++= Dependencies.persistence +Dependencies.persistence MimaKeys.previousArtifact := akkaPreviousArtifact("akka-persistence-experimental") diff --git a/akka-remote-tests/build.sbt b/akka-remote-tests/build.sbt index c49a17694f..5b21c848f2 100644 --- a/akka-remote-tests/build.sbt +++ b/akka-remote-tests/build.sbt @@ -10,7 +10,7 @@ Unidoc.scaladocSettings MultiNode.multiJvmSettings -libraryDependencies ++= Dependencies.remoteTests +Dependencies.remoteTests // disable parallel tests parallelExecution in Test := false diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 301426ba9c..c4153f35f7 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -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") @@ -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 @@ -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 @@ -93,7 +94,7 @@ 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) @@ -101,8 +102,7 @@ object Dependencies { 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"))) @@ -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))) +}