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を追加します。
- project/plugins.sbt
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")
- project/build.scala
下記パッケージのインポートを追加します
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