Skip to content

Instantly share code, notes, and snippets.

@ryantanner
Created August 27, 2013 16:22
Show Gist options
  • Save ryantanner/6355752 to your computer and use it in GitHub Desktop.
Save ryantanner/6355752 to your computer and use it in GitHub Desktop.
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