Scala
Scalatraのスタンドアローン版jarのビルドについは下記ガイドが参考になりますが、sbt-assemblyプラグインの組み込みかたが省略されています。
http://www.scalatra.org/2.3/guides/deployment/standalone.html
sbt-assemblyの組み込み手順は下記の通りです。
- src/main/scala/com/example/JettyLauncher.scala
ガイド通り、埋め込みJettyを起動するobjcet JettyLauncherを追加します。
plugins.sbtに下記行を追加します。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
変更後のplugins.sbtの例は下記の通りです。
addSbtPlugin("com.mojolly.scalate" % "xsbt-scalate-generator" % "0.5.0")
addSbtPlugin("org.scalatra.sbt" % "scalatra-sbt" % "0.3.5")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
下記パッケージのインポートを追加します
import sbtassembly.Plugin._
import AssemblyKeys._
Projectの引数に下記を追加します。(scalatraSettingsの後ろなど)
++assemblySettings
するとsettingsの1行目は下記のようになります。
settings = ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ assemblySettings ++ Seq(
libraryDependanciesのjetty-webappの”container”を”container;compile”に置き換えます。
"org.eclipse.jetty" % "jetty-webapp" % "9.1.3.v20140225" % "container;compile",
変更後のbuild.scalaの例は下記の通りです。
import sbt._
import Keys._
import org.scalatra.sbt._
import org.scalatra.sbt.PluginKeys._
import com.mojolly.scalate.ScalatePlugin._
import ScalateKeys._
import sbtassembly.Plugin._
import AssemblyKeys._
object MyScalatraWebAppBuild extends Build {
val Organization = "com.example"
val Name = "My Scalatra Web App"
val Version = "0.1.0-SNAPSHOT"
val ScalaVersion = "2.11.1"
val ScalatraVersion = "2.3.0"
lazy val project = Project (
"my-scalatra-web-app",
file("."),
settings = ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ assemblySettings ++ Seq(
organization := Organization,
name := Name,
version := Version,
scalaVersion := ScalaVersion,
resolvers += Classpaths.typesafeReleases,
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
"org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "9.1.3.v20140225" % "container;compile",
"org.eclipse.jetty" % "jetty-plus" % "9.1.3.v20140225" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),
"org.scalatra" %% "scalatra-json" % "2.3.0",
),
scalateTemplateConfig in Compile <<= (sourceDirectory in Compile){ base =>
Seq(
TemplateConfig(
base / "webapp" / "WEB-INF" / "templates",
Seq.empty, /* default imports should be added here */
Seq(
Binding("context", "_root_.org.scalatra.scalate.ScalatraRenderContext", importMembers = true, isImplicit = true)
), /* add extra bindings here */
Some("templates")
)
)
}
)
)
}
これで、jettyを埋め込んだスタンドアローン版をビルドできます。
sbt clean assembly