Created
August 27, 2013 16:22
-
-
Save ryantanner/6355752 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sbt._ | |
import sbt.Keys._ | |
import PlayProject._ | |
import akka.sbt.AkkaKernelPlugin | |
import akka.sbt.AkkaKernelPlugin.{ Dist, outputDirectory, distJvmOptions, configSourceDirs, distMainClass } | |
import com.typesafe.sbt.SbtMultiJvm | |
import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys._ | |
import sbtassembly.Plugin._ | |
import AssemblyKeys._ | |
import twirl.sbt.TwirlPlugin._ | |
object MyProjectBackgroundBuild extends Build { | |
val appName = "myproject" | |
val appVersion = "0.1-SNAPSHOT" | |
object V { | |
val Scala = "2.10.0" | |
val Akka = "2.2.0" | |
} | |
val akkaDependencies = Seq( | |
"com.typesafe.akka" %% "akka-actor" % V.Akka, | |
"com.typesafe.akka" %% "akka-slf4j" % V.Akka, | |
"com.typesafe.akka" %% "akka-kernel" % V.Akka, | |
"com.typesafe.akka" %% "akka-cluster" % V.Akka, | |
"com.typesafe.akka" %% "akka-camel" % V.Akka, | |
"com.typesafe.akka" %% "akka-contrib" % V.Akka, | |
"com.typesafe.akka" %% "akka-testkit" % V.Akka | |
) | |
val myProjectSettings = Project.defaultSettings ++ Seq( | |
version := appVersion, | |
scalaVersion := V.Scala, | |
exportJars := true, | |
resolvers ++= Seq( | |
"Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases", | |
"Objectstyle repository" at " http://objectstyle.org/maven2/" | |
), | |
libraryDependencies ++= akkaDependencies ++ Seq( | |
"com.typesafe.akka" %% "akka-multi-node-testkit" % V.Akka, | |
"com.typesafe" % "config" % "1.0.0", | |
"ch.qos.logback" % "logback-classic" % "1.0.7", | |
"joda-time" % "joda-time" % "2.2", | |
"org.joda" % "joda-convert" % "1.2", | |
"org.apache.commons" % "commons-lang3" % "3.1", | |
"org.scalatest" % "scalatest_2.10" % "1.9.1" % "test" | |
) | |
) ++ AkkaKernelPlugin.distSettings ++ Seq( | |
distJvmOptions in Dist := "-Djava.library.path=" + file("sigar-lib") // Native sigar libraries | |
) | |
val nodeSettings = myProjectSettings ++ Seq( | |
resourceDirectory in Test <<= Project.value(mainConfDirectory), | |
resourceDirectory in Compile <<= Project.value(mainConfDirectory) | |
) | |
lazy val multiJvmSettings = SbtMultiJvm.multiJvmSettings ++ Seq( | |
// make sure that MultiJvm test are compiled by the default test compilation | |
compile in MultiJvm <<= (compile in MultiJvm) triggeredBy (compile in Test), | |
// disable parallel tests | |
parallelExecution in Test := false, | |
javaOptions += "-Xms256M -Xmx256M", | |
// make sure that MultiJvm tests are executed by the default test target | |
executeTests in Test <<= | |
((executeTests in Test), (executeTests in MultiJvm)) map { | |
case ((_, testResults), (_, multiJvmResults)) => | |
val results = testResults ++ multiJvmResults | |
(Tests.overall(results.values), results) | |
} | |
) | |
lazy val commons = Project( | |
id = "myProject-commons", | |
base = file("myProject-commons"), | |
settings = nodeSettings ++ Seq( | |
name := "myProject Commons", | |
libraryDependencies ++= Seq( | |
//"org.codehaus.jackson" % "jackson-core-asl" % "1.9.10", | |
//"org.codehaus.jackson" % "jackson-mapper-asl" % "1.9.10", | |
//"com.codahale" % "jerkson_2.10" % "0.5.0", | |
"play" %% "play-java" % "2.1.3", | |
"commons-codec" % "commons-codec" % "1.8", | |
"com.typesafe.slick" %% "slick" % "1.0.0", | |
"mysql" % "mysql-connector-java" % "5.1.24", | |
"com.github.tototoshi" %% "slick-joda-mapper" % "0.3.0", | |
"c3p0" % "c3p0" % "0.9.1.2", | |
"org.scalatest" % "scalatest_2.10" % "1.9.1", | |
"org.slf4j" % "slf4j-api" % "1.7.5" | |
) | |
) | |
) | |
lazy val imap = Project( | |
id = "myProject-imap", | |
base = file("myProject-imap"), | |
settings = nodeSettings ++ Seq( | |
name := "myProject IMAP" | |
) ++ Seq( | |
libraryDependencies ++= Seq( | |
"com.sun.mail" % "gimap" % "1.4.7", | |
"javax.mail" % "mail" % "1.4.7", | |
"net.oauth.core" % "oauth" % "20100527", | |
"commons-io" % "commons-io" % "1.3.2", | |
"net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15" | |
), | |
outputDirectory in Dist := file("target/myProject-imap-dist") | |
) | |
) dependsOn (commons) | |
lazy val analytics = Project( | |
id = "myProject-analytics", | |
base = file("myProject-analytics"), | |
settings = nodeSettings ++ Seq( | |
name := "myProject Analytics", | |
libraryDependencies ++= Seq( | |
), | |
resourceDirectory <<= Project.value(mainConfDirectory) | |
) | |
) dependsOn (commons) | |
lazy val mailer = Project( | |
id = "myProject-mailer", | |
base = file("myProject-mailer"), | |
settings = nodeSettings ++ Twirl.settings ++ Seq( | |
name := "myProject Mailer", | |
libraryDependencies ++= Seq( | |
"commons-logging" % "commons-logging" % "1.1.3", | |
"org.apache.camel" % "camel-mail" % "2.11.1" | |
), | |
Twirl.twirlImports := Seq("com.gomyproject.commons.models._") | |
) | |
) dependsOn (commons) | |
lazy val node = Project( | |
id = "myProject-node", | |
base = file("myProject-node"), | |
settings = nodeSettings ++ multiJvmSettings ++ Seq( | |
name := "myProject Node", | |
libraryDependencies ++= Seq( | |
"org.fusesource" % "sigar" % "1.6.4" | |
), | |
distJvmOptions in Dist += " -Xms256M -Xmx256M", | |
outputDirectory in Dist := file("target/myProject-node-dist"), | |
mergeStrategy in assembly in MultiJvm <<= (mergeStrategy in assembly in MultiJvm) { (old) => | |
{ | |
case "logback.xml" => MergeStrategy.first | |
case "play.plugins" => MergeStrategy.first | |
case "pom.properties" => MergeStrategy.first | |
case "overview.html" => MergeStrategy.discard | |
case "application.conf" => MergeStrategy.concat | |
case PathList("META-INF", "spring.tooling") => MergeStrategy.first | |
case x => old(x) | |
} | |
}, | |
resourceDirectory in MultiJvm <<= Project.value(mainConfDirectory), | |
jvmOptions in MultiJvm := Seq("-Djava.library.path=" + file("sigar-lib")) | |
) | |
).dependsOn(imap, analytics, mailer, supervisor, commons) | |
.aggregate(imap, analytics, mailer, supervisor, commons) | |
.configs(MultiJvm) | |
lazy val supervisor = Project( | |
id = "myProject-supervisor", | |
base = file("myProject-supervisor"), | |
settings = nodeSettings ++ Seq( | |
name := "myProject Supervisor", | |
libraryDependencies ++= Seq( | |
"org.quartz-scheduler" % "quartz" % "2.1.7", | |
"org.mindrot" % "jbcrypt" % "0.3m", | |
"com.typesafe.slick" %% "slick" % "1.0.0", | |
"mysql" % "mysql-connector-java" % "5.1.18" | |
) | |
) | |
) dependsOn (analytics, imap, mailer, commons) | |
lazy val admin = play.Project(appName + "-admin", appVersion, appDependencies, path = file("myProject-admin")).settings( | |
libraryDependencies ++= akkaDependencies ++ Seq( | |
"org.quartz-scheduler" % "quartz" % "2.1.7", | |
"org.webjars" % "webjars-play" % "2.1.0-1", | |
"org.webjars" % "bootstrap" % "2.3.1", | |
"org.webjars" % "jquery" % "1.9.1", | |
"org.webjars" % "handlebars" % "1.0.0", | |
"org.webjars" % "underscorejs" % "1.5.1", | |
"org.mindrot" % "jbcrypt" % "0.3m", | |
"jp.t2v" %% "play2.auth" % "0.10" | |
), | |
templatesImport ++= Seq( | |
"com.myproject.supervisor.models._", | |
"com.myproject.admin.controllers._", | |
"com.myproject.admin.models._", | |
"com.myproject.commons.models.Page", | |
"org.joda.time.DateTime", | |
"org.joda.time.format.DateTimeFormat", | |
"org.quartz.CronExpression", | |
"play.api.mvc.Flash" | |
), | |
resourceDirectory in Test <<= Project.value(mainConfDirectory) | |
) dependsOn(supervisor) aggregate (supervisor) | |
val appDependencies = Seq( | |
jdbc, | |
"com.typesafe.akka" %% "akka-cluster" % V.Akka, | |
"com.typesafe.akka" %% "akka-remote" % V.Akka | |
) | |
val mainConfDirectory: File = new File(main.base.getCanonicalPath + "/conf-node") | |
lazy val main = play.Project(appName, appVersion, appDependencies).settings( | |
) dependsOn(admin) aggregate (admin) | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment