Scalatra 2.3でスタンドアローン版jarをビルドする

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を追加します。

  • 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         

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です