我实现了一个 Scalatra servlet,现在想创建一个可执行 jar,就像本教程中描述的那样:http ://www.scalatra.org/2.2/guides/deployment/standalone.html
我使用 IntelliJ IDEA 和 Scala 插件进行开发,使用 sbt 构建和运行我的 servlet(我使用 sbt-idea 生成项目文件)。我的问题是,当我尝试编译我的项目时,找不到教程中的 JettyLauncher 使用的码头包。
更新:使用马特的回答,我能够编译和运行 JettyLauncher。但是,我仍然对 sbt-assembly ( https://github.com/sbt/sbt-assembly ) 有问题。我按照自述文件中的说明进行操作,但在尝试执行组装任务时出现以下错误:
[error] Not a valid command: assembly
[error] No such setting/task
[error] assembly
[error] ^
更新 2:感谢马特,我现在有了一个可以工作的 build.scala,我可以使用组装任务生成一个可执行的 jar。但是,sbt-assembly 不会将 /src/main/webapp 的内容添加到 jar 中。我使用这个文件夹来存储我的 HTML、CSS 和 JavaScript 文件。如果 Scalatra 无法匹配路由,它会提供这些文件,这在使用 container:start 运行 servlet 时有效。此外,我将服务器需要的一些文件存储在 /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")
)
)
}
)
)
}
提前致谢!