2013-07-25 6 views
10

Das klingt einfach, aber es kostet mich tatsächlich einen ganzen Tag: Ich möchte ändern, um den Port zu ändern, auf dem scalatra läuft, in der Entwicklung. Ich begann mit der Hallo Welt-G8-Vorlage, und habe von dort aus gebaut.Scalatra Port ändern

Hier ist, was ich versucht habe, so weit:

Ändern der Port in build.scala, ala Dokumentation: http://www.scalatra.org/guides/deployment/configuration.html Diese nicht kompilieren, weil Port nicht definiert ist.

Ändern der Port in build.scala, ala diese beiden Beispiele: https: gist.github.com 58af6cfbfe721a562a48 döste https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/sbt-test/web/servlet/project/Build.scala Das gleiche Problem: port ist nicht definiert

den Einstiegspunkt neu definieren, ala http: www .scalatra.org führt standalone.html Einsatz läuft noch auf Port 8080

init params in Bootstrap ändern, ala http: www.scalatra.org führt Configuration.html Einsatz läuft noch auf Port 8080

Jede Hilfe wird geschätzt. Ich kann aus irgendeinem Grund nicht mehr als 2 Links posten. Ersetzen Sie daher Leerzeichen durch Schrägstriche, um den URLs zu folgen.

Hier ist meine build.scala, falls es hilft.

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") 
     ) 
     ) 
     } 
    ) 
) 
} 

Danke Jungs,

~ Erik

+0

Gemäß den Dokumenten lautet die Einstellung build.scala: 'port in container.Configuration: = 8081', aber Sie haben es als' port in Conf: = 8081'. Haben Sie es genau so versucht, wie sie es in den Dokumenten angeben? – cmbaxter

+0

ja, ich habe das auch versucht – Kire321

Antwort

14

-Update 2016.01.23: scalatra-sbt verwendet XSBT-web-Plugin 2.0.4 und einige Einstellungen geändert. Sie finden die xsbt-web-plugin docs here (Hinweis: Integrationen für xsbt-web-plugin, sbt-web, docker und Standalone-Builds finden Sie in https://github.com/scalatra/scalatra-in-action, siehe Kapitel09- * Verzeichnisse).

Für eine Scalatra App bedeutet dies:

  • Verwendung jetty:start, jetty:stop statt Behälter: Start, Behälter: stop
  • JettyPlugin
  • neue Schlüssel verwenden aktivieren, zum Beispiel containerPort in Jetty := 8090, target in webappPrepare, sourceDirectory in webappPrepare
  • nur .scala basierend SBT Builddefinition: die richtigen Importe verwenden das Plugin und Einstelltasten

A .sbt Builddefinition zu importieren:

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 

A.scala basierend SBT Builddefinition hat etwas weniger Magie, und wir müssen das Plugin und seine Einstellungen importieren:

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._ 

Die tatsächliche Builddefinition mit enablePlugins(JettyPlugin) und einen eigenen Port:

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: _*) 

} 

Stellen Sie sicher, dass Sie die Importe verwenden:

Mit diesen Importen können Sie dann die verwenden richtige Schlüssel und Konfiguration:

port in container.Configuration := 9000 

Dies gehen im settings Block:

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

scalatra-sbt baut auf XSBT-web-Plugin, deren Einstellungen sind hier dokumentiert: https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

+0

Das funktioniert perfekt. Ich werde sehen, ob ich sie dazu bringen kann, das zu den offiziellen Dokumenten hinzuzufügen, da ihr Beispiel ohne es nicht funktioniert. – jlegler

+0

Diese Importe funktionieren nicht mehr: 'Objekt xsbtwebplugin ist kein Mitglied des Pakets com.earldouglas'. Irgendein Rat? –

+0

@AhmedFasih Ich habe den Beitrag auf die neusten Versionen von scalatra-sbt und xsbt-web-plugin aktualisiert. –

1

ich dies tat und arbeitete:

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

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

Ich erstellte eine leere build.sbt-Datei in th e Wurzel meines Projekts und setzen:

port in container.Configuration := 8090

in der Datei für sie zu arbeiten.