2013-07-25 16 views
10

To brzmi prosto, ale kosztowało mnie to cały dzień: chcę się zmienić, aby zmienić port, na którym działa scalatra, w fazie rozwoju. Zacząłem od szablonu hello world g8 i budowałem od tego miejsca.Zmiana portu Scalatra

Oto, co starałem dotąd:

Zmiana portu w build.scala, ala dokumentacja: http://www.scalatra.org/guides/deployment/configuration.html nie skompilować, ponieważ port jest niezdefiniowany.

Zmiana portu w build.scala, ala tych dwóch przykładach: https: gist.github.com drzemał 58af6cfbfe721a562a48 https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/sbt-test/web/servlet/project/Build.scala sam problem: port jest niezdefiniowany

Redefiniowanie punkt wejścia, ala http: www .scalatra.org prowadzi wdrażania standalone.html nadal działa na porcie 8080

Zmiana startowych params w bootstrap, ala http: www.scalatra.org prowadzi wdrażania configuration.html nadal działa na porcie 8080

Każda pomoc doceniona. Z jakiegoś powodu nie mogę opublikować więcej niż 2 linków, więc zamień spacje na przednie ukośniki, aby śledzić adresy URL.

Oto mój build.scala w przypadku, gdy pomaga.

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

Dzięki chłopaki,

~ Erik

+0

Zgodnie z dokumentami, ustawienie build.scala to: 'port w container.Configuration: = 8081', ale masz go jako' port w Conf: = 8081'. Czy wypróbowałeś go dokładnie tak, jak to określił w dokumentach? – cmbaxter

+0

tak, próbowałem tego również – Kire321

Odpowiedz

14

Aktualizacja 23.01.2016: scalatra-sbt wykorzystuje xsbt-web-plugin 2.0.4 i kilka ustawień zmieniło. Dokumenty xsbt-web-plugin można znaleźć here (powiązane notatki: integracje wtyczek xsbt-web, sbt-web, docker i samodzielne kompilacje można znaleźć w https://github.com/scalatra/scalatra-in-action, zobacz katalogi 09- *).

Dla aplikacji Scalatra to znaczy:

  • zastosowanie jetty:start, jetty:stop zamiast Pojemnik rozpoczęciem pojemnik stop
  • umożliwić JettyPlugin
  • stosować nowe klucze, np containerPort in Jetty := 8090, target in webappPrepare, sourceDirectory in webappPrepare
  • tylko na podstawie .scala definicja SBT build: stosować odpowiednie importu importować wtyczki i ustawienia klawiszy

A .sbt definicji kompilacji:

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 oparty definicja SBT build ma nieco mniejszą magię i musimy importować wtyczki i jego ustawienia:

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

Rzeczywista definicja budować z enablePlugins(JettyPlugin) i port niestandardowy:

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

} 

Upewnij się, że używasz importu:

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

Za pomocą tych importów możesz użyć następnie poprawny klucz i konfiguracja:

port in container.Configuration := 9000 

To idzie w bloku settings:

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

scalatra-SBT opiera się na xsbt-web-plugin, którego ustawienia są udokumentowane tutaj: https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

+0

To działa idealnie. Zamierzam sprawdzić, czy mogę je dodać do oficjalnych dokumentów, ponieważ ich przykład nie działa bez niego. – jlegler

+0

Ten import nie działa: 'object xsbtwebplugin nie jest członkiem pakietu com.earldouglas'. Jakakolwiek rada? –

+0

@AhmedFasih Zaktualizowałem wpis do najnowszych wersji wtyczek skalatra-sbt i xsbt-web. –

1

Zrobiłem to i pracował:

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

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

Utworzono pusty plik build.sbt w korzeń e mojego projektu i umieścić:

port in container.Configuration := 8090

w pliku do jego pracy.