如何更改 Scalatra 的码头端口
How to change jetty port for Scalatra
我在很多地方看到这样的短语:
Changing the port in development Add
port in container.Configuration := 8081
to project/build.scala
但是在build.scala中哪里?这是香草 build.scala。目前还不清楚该添加应该去哪里:
object KeywordsBuild extends Build {
val Organization = "com.blazedb"
..
lazy val project = Project (
"keywords",
file("."),
settings = ScalatraPlugin.scalatraSettings ++ scalateSettings ++ Seq(
organization := Organization,
name := Name,
version := Version,
..
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
..
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
),
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")
)
无论我尝试将其放置在何处,都会出现以下错误消息:
[info] Compiling 1 Scala source to /shared/wfdemo/project/target/scala-2.10/sbt-0.13/classes...
/shared/wfdemo/build.sbt:1: error: not found: value port
port in container.Configuration := 8081
正确的方法是添加到
build.sbt
因此文档似乎不正确 - 或至少具有误导性。
$cat build.sbt
val myPort = 9090
jetty(port = myPort)
在 /src/main/scala 下创建文件 JettyLauncher.scala :
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.{DefaultServlet, ServletContextHandler}
import org.eclipse.jetty.webapp.WebAppContext
import org.scalatra.servlet.ScalatraListener
object JettyLauncher {
def main(args: Array[String]) {
val port = System.getProperty("port","8090").toInt
val server = new Server(port)
val context = new WebAppContext()
context setContextPath "/"
context.setResourceBase("src/main/webapp")
context.addEventListener(new ScalatraListener)
context.addServlet(classOf[DefaultServlet], "/")
server.setHandler(context)
server.start
server.join
}
}
确保你的 plugins.sbt 在 project/ 下有:
addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.13")
addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.2")
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.0.0")
再次 sbt = 0.13.16
做一个 sbt clean compile assembly package(现在你有一个 sbt-assembly 插件)
运行 你的 jar 如下:
java -Dport=8081 -Dname=sameer -jar /Users/sumit/Documents/repos/inner/paytm-insurance-ml-api/serving-layers/model-serving-movies-cp/target/scala-2.11/model-serving-movies-cp-assembly-0.1.jar
这对我有用:
13:11:18.326 [main] INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@509dbdcf{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
13:11:18.327 [main] INFO org.eclipse.jetty.server.Server - Started @1312ms
我在很多地方看到这样的短语:
Changing the port in development Add
port in container.Configuration := 8081
to project/build.scala
但是在build.scala中哪里?这是香草 build.scala。目前还不清楚该添加应该去哪里:
object KeywordsBuild extends Build {
val Organization = "com.blazedb"
..
lazy val project = Project (
"keywords",
file("."),
settings = ScalatraPlugin.scalatraSettings ++ scalateSettings ++ Seq(
organization := Organization,
name := Name,
version := Version,
..
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
..
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
),
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")
)
无论我尝试将其放置在何处,都会出现以下错误消息:
[info] Compiling 1 Scala source to /shared/wfdemo/project/target/scala-2.10/sbt-0.13/classes...
/shared/wfdemo/build.sbt:1: error: not found: value port
port in container.Configuration := 8081
正确的方法是添加到
build.sbt
因此文档似乎不正确 - 或至少具有误导性。
$cat build.sbt
val myPort = 9090
jetty(port = myPort)
在 /src/main/scala 下创建文件 JettyLauncher.scala :
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.{DefaultServlet, ServletContextHandler}
import org.eclipse.jetty.webapp.WebAppContext
import org.scalatra.servlet.ScalatraListener
object JettyLauncher {
def main(args: Array[String]) {
val port = System.getProperty("port","8090").toInt
val server = new Server(port)
val context = new WebAppContext()
context setContextPath "/"
context.setResourceBase("src/main/webapp")
context.addEventListener(new ScalatraListener)
context.addServlet(classOf[DefaultServlet], "/")
server.setHandler(context)
server.start
server.join
}
}
确保你的 plugins.sbt 在 project/ 下有:
addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.13")
addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.2")
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.0.0")
再次 sbt = 0.13.16
做一个 sbt clean compile assembly package(现在你有一个 sbt-assembly 插件)
运行 你的 jar 如下:
java -Dport=8081 -Dname=sameer -jar /Users/sumit/Documents/repos/inner/paytm-insurance-ml-api/serving-layers/model-serving-movies-cp/target/scala-2.11/model-serving-movies-cp-assembly-0.1.jar
这对我有用:
13:11:18.326 [main] INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@509dbdcf{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
13:11:18.327 [main] INFO org.eclipse.jetty.server.Server - Started @1312ms