API-Explorer/project/build.scala
2016-07-18 11:38:14 +02:00

97 lines
3.0 KiB
Scala
Executable File

import sbt._
import Keys._
import com.earldouglas.xwp._
import com.earldouglas.xwp.WebappPlugin
import com.earldouglas.xwp.ContainerPlugin.autoImport._
object LiftProjectBuild extends Build {
override lazy val settings = super.settings ++ buildSettings
lazy val buildSettings = Seq(
organization := pom.groupId,
version := pom.version
)
lazy val openBank = Project(
pom.artifactId,
base = file("."),
settings = defaultSettings ++ pom.settings)
.enablePlugins(JettyPlugin)
object pom {
val pomFile = "pom.xml"
lazy val pom = xml.XML.loadFile(pomFile)
lazy val pomProperties = (for{
props <- (pom \ "properties")
p <- props.child
} yield {
p.label -> p.text
}).toMap
private lazy val PropertiesExpr = """.*\$\{(.*?)\}.*""".r
def populateProps(t: String) = t match {
case PropertiesExpr(p) => {
val replaceWith = pomProperties.get(p)
t.replace("${"+p+"}", replaceWith.getOrElse(throw new Exception("Cannot find property: '" + p + "' required by: '" + t + "' in: " + pomFile)))
}
case _ => t
}
lazy val pomDeps = (for{
dep <- pom \ "dependencies" \ "dependency"
} yield {
val scope = (dep \ "scope")
val groupId = (dep \ "groupId").text
val noScope = populateProps(groupId) % populateProps((dep \ "artifactId").text) % populateProps((dep \ "version").text)
val nonCustom = if (scope.nonEmpty) noScope % populateProps(scope.text)
else noScope
if (groupId.endsWith("jetty")) Seq(noScope % "container", nonCustom) //hack to add jetty deps in container scope as it is required by the web plugin
else Seq(nonCustom)
}).flatten
lazy val pomRepos = for {
rep <- pom \ "repositories" \ "repository"
} yield {
populateProps((rep \ "url").text) at populateProps((rep \ "url").text)
}
lazy val pomScalaVersion = (pom \ "properties" \ "scala.compiler").text
lazy val artifactId = (pom \ "artifactId").text
lazy val groupId = (pom \ "groupId").text
lazy val version = (pom \ "version").text
lazy val name = (pom \ "name").text
lazy val settings = Seq(
scalaVersion := pomScalaVersion,
libraryDependencies ++= pomDeps,
resolvers ++= pomRepos,
containerPort := 8082
)
}
lazy val defaultSettings = Defaults.defaultSettings ++ Seq(
name := pom.name,
resolvers ++= Seq(
"Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases",
"Java.net Maven3 Repository" at "http://download.java.net/maven/3/",
"Scala-Tools Dependencies Repository for Releases" at "http://scala-tools.org/repo-releases",
"Scala-Tools Dependencies Repository for Snapshots" at "http://scala-tools.org/repo-snapshots"),
// compile options
scalacOptions ++= Seq("-encoding", "UTF-8", "-deprecation", "-unchecked", "-Xmax-classfile-name", "78"),
javacOptions ++= Seq("-Xlint:unchecked", "-Xlint:deprecation"),
// show full stack traces
testOptions in Test += Tests.Argument("-oF")
)
}