9

Scalatra サーブレットを実装し、このチュートリアルで説明されているように、実行可能な jar を作成したいと考えています: http://www.scalatra.org/2.2/guides/deployment/standalone.html

開発には IntelliJ IDEA と Scala プラグインを使用し、sbt を使用してサーブレットをビルドして実行します (プロジェクト ファイルの生成には sbt-idea を使用しました)。私の問題は、プロジェクトをコンパイルしようとすると、チュートリアルの JettyLauncher が使用する jetty パッケージが見つからないことです。

更新: Matt の回答を使用して、JettyLauncher をコンパイルして実行することができました。ただし、sbt-assembly ( https://github.com/sbt/sbt-assembly )にはまだ問題があります。readme の指示に従いましたが、アセンブリ タスクを実行しようとすると次のエラーが発生します。

[error] Not a valid command: assembly
[error] No such setting/task
[error] assembly
[error]         ^  

更新 2: Matt のおかげで、build.scala が動作するようになり、アセンブリ タスクを使用して実行可能な jar ファイルを生成できるようになりました。ただし、sbt-assembly は /src/main/webapp のコンテンツを jar に追加しません。このフォルダーを使用して、HTML、CSS、および JavaScript ファイルを保存します。Scalatra がルートに一致しない場合、これらのファイルを提供します。これは、container:start を使用してサーブレットを実行するときに機能します。さらに、サーバーが必要とするいくつかのファイルを /src/main/webapp/WEB-INF に保存します。これらのファイルも jar に追加されません。

私の 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 SketchlinkBuild extends Build {
  val Organization = "de.foobar"
  val Name = "Foobar"
  val Version = "0.1"
  val ScalaVersion = "2.10.0"
  val ScalatraVersion = "2.2.0"

  lazy val project = Project (
    "foobar",
    file("."),
    settings = Defaults.defaultSettings ++ 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" % "8.1.8.v20121106" % "compile;container",
            "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "compile;container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),
            /* Apache commons libraries */
            "commons-codec" % "commons-codec" % "1.7", 
            "commons-io" % "commons-io" % "2.4",
            /* JSON support */
            "org.scalatra" %% "scalatra-json" % "2.2.1",
            "org.json4s"   %% "json4s-jackson" % "3.2.4",
            /* thumbnail library */
            "net.coobird" % "thumbnailator" % "0.4.3"
     ),
     // ignore about.html in jars (needed for sbt-assembly)
     mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
       case "about.html" => MergeStrategy.discard
       case x => old(x) }
     },
     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")
          )
        )
      }
    )
  )
}

前もって感謝します!

4

3 に答える 3

1

最新の回答については、次の 2 つのファイルを参照してください (クレジットは Action book の Scalatra に移動します)。

https://github.com/scalatra/scalatra-in-action/blob/master/chapter09-standalone/src/main/scala/ScalatraLauncher.scala

https://github.com/scalatra/scalatra-in-action/blob/master/chapter09-standalone/project/Build.scala

于 2015-06-01T07:33:18.463 に答える