2013-07-25 134 views
10

这听起来很基本,但它实际上花了我一整天的时间:我想改变以改变Scalatra在开发中的端口。我从hello world g8模板开始,并从那里开始构建。更改Scalatra端口

这里是我试过到目前为止:

改变build.scala端口,ALA文件: http://www.scalatra.org/guides/deployment/configuration.html 这并不编译,因为港口是不确定的。

改变build.scala端口,ALA这两个例子: HTTPS:gist.github.com打瞌睡58af6cfbfe721a562a48 https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/sbt-test/web/servlet/project/Build.scala 同样的问题:端口是未定义

重新定义切入点,ALA HTTP:WWW .scalatra.org指导部署standalone.html 仍然运行在8080端口上

改变引导初始化参数,ALA HTTP:www.scalatra.org指导部署configuration.html 仍然运行在端口8080

任何帮助表示赞赏。由于某些原因,我无法发布超过2个链接,因此请使用正斜杠替换空格以跟踪网址。

这是我的build.scala万一有帮助。

import sbt._ 
import Keys._ 
import org.scalatra.sbt._ 
import org.scalatra.sbt.PluginKeys._ 
import com.mojolly.scalate.ScalatePlugin._ 
import ScalateKeys._ 
import com.earldouglas.xsbtwebplugin._ 
import WebPlugin._ 

object YesManBuild extends Build { 
    val Organization = "com.prezi" 
    val Name = "Yes Man" 
    val Version = "0.1.0-SNAPSHOT" 
    val ScalaVersion = "2.10.2" 
    val ScalatraVersion = "2.2.1" 

    //def Conf = config("container") 

    lazy val project = Project (
    "yes-man", 
    file("."), 
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ Seq(
     //port in Conf := 8081, 
     mainClass := Some("com.prezi.eureka.JettyLauncher.main"), 
     organization := Organization, 
     name := Name, 
     version := Version, 
     scalaVersion := ScalaVersion, 
     resolvers += Classpaths.typesafeReleases, 
     libraryDependencies ++= Seq(
     "org.slf4j" % "slf4j-log4j12" % "1.7.5", 
     "com.netflix.eureka" % "eureka-client" % "1.1.97", 
     "com.netflix.ribbon" % "ribbon-httpclient" % "0.1.10", 
     "com.netflix.ribbon" % "ribbon-eureka" % "0.1.11", 
     "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" % "container", 
     "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")), 
     "org.eclipse.jetty.aggregate" % "jetty-all" % "9.0.4.v20130625" 
    ), 
     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") 
     ) 
     ) 
     } 
    ) 
) 
} 

谢谢你们,

〜埃里克

+0

根据文档,build.scala设置为:'port in container.Configuration:= 8081',但是您将它作为Conf:= 8081中的端口。你是否完全按照他们在文档中指定的方式进行了尝试? – cmbaxter

+0

是的,我也试过这 – Kire321

回答

14

更新2016年1月23日:scalatra-sbt使用xsbt-网络插件2.0.4和一些设置改变。您可以找到xsbt-web-plugin文档here(相关说明:xsbt-web-plugin,sbt-web,docker和独立版本的集成可在https://github.com/scalatra/scalatra-in-action中找到,请参阅第09- *目录)。

对于Scalatra的应用程序,这意味着:

  • 使用jetty:startjetty:stop代替容器:开始,容器,包括:停止
  • 使JettyPlugin
  • 使用新的密钥,例如containerPort in Jetty := 8090target in webappPreparesourceDirectory in webappPrepare
  • 只有.scala基于SBT生成定义:使用正确的进口导入的插件和设置键

一个名.bst构建定义:

organization := "org.foo" 
name := "My build" 
version := "0.1.0-SNAPSHOT" 
scalaVersion := "2.11.6" 

val ScalatraVersion = "2.4.0" 

libraryDependencies ++= Seq(
    "org.scalatra" %% "scalatra" % ScalatraVersion, 
    "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test", 
    "com.typesafe" % "config" % "1.2.1", 
    "ch.qos.logback" % "logback-classic" % "1.1.3" % "runtime", 
    "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided" 
) 

enablePlugins(JettyPlugin) 

containerPort in Jetty := 8090 

一个。基于Scala的SBT构建定义确实有神奇的少一点,我们需要导入插件及其设置:

import sbt._ 
import Keys._ 

import org.scalatra.sbt._ 

import com.earldouglas.xwp.JettyPlugin 
import com.earldouglas.xwp.JettyPlugin.autoImport._ 
import com.earldouglas.xwp.ContainerPlugin.autoImport._ 

enablePlugins(JettyPlugin)实际构建定义和自定义端口:

object MyBuild extends Build { 
    val Organization = "org.foo" 
    val Name = "My Build" 
    val Version = "0.1.0-SNAPSHOT" 
    val ScalaVersion = "2.11.6" 
    val ScalatraVersion = "2.4.0" 

    val mySettings = 
    ScalatraPlugin.scalatraSettings ++ Seq(
     organization := Organization, 
     name := Name, 
     version := Version, 
     scalaVersion := ScalaVersion, 
     libraryDependencies ++= Seq(
     "org.scalatra" %% "scalatra" % ScalatraVersion, 
     "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test", 
     "com.typesafe" % "config" % "1.2.1", 
     "ch.qos.logback" % "logback-classic" % "1.1.3" % "runtime", 
     "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided" 
    ), 
     containerPort in Jetty := 8090 
    ) 

    lazy val project = Project("chapter09", file(".")) 
    .enablePlugins(JettyPlugin) 
    .settings(mySettings: _*) 

} 

请确保您使用的是进口:

import com.earldouglas.xsbtwebplugin.PluginKeys._ 
import com.earldouglas.xsbtwebplugin.WebPlugin._ 

有了这些,你可以使用进口则正确的密钥及配置:

port in container.Configuration := 9000 

这正好在settings块:

... 
lazy val project = Project (
    "example", 
    file("."), 
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ Seq(
    port in container.Configuration := 9000, 
    organization := Organization, 
... 

Scalatra的-SBT建立在xsbt-Web的插件,其设置都记录在这里:https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

+0

这完美的作品。我会看看我是否可以让他们将此添加到官方文档中,因为他们的示例在没有它的情况下无法正常工作。 – jlegler

+0

那些导入不再有效:'对象xsbtwebplugin不是包com.earldouglas'的成员。有什么建议? –

+0

@AhmedFasih我将帖子更新为最新的scalatra-sbt和xsbt-web-plugin版本。 –

1

我这样做并曾工作:

.... 
val port = SettingKey[Int]("port") 
val Conf = config("container") 

lazy val project = Project (
    port in Conf := 8081, 
    .... 
) 
0

我在th创建了一个空的build.sbt文件我的项目电子根地说:

port in container.Configuration := 8090

文件为它工作在