2013-07-25 15 views
10

Questo suona semplice, ma in realtà mi costa un giorno intero: voglio cambiare per cambiare la porta su cui viene eseguito lo scalatra, in fase di sviluppo. Ho iniziato con il modello Hello World G8 e ho iniziato a costruire da lì.Cambiare la porta di Scalatra

Ecco quello che ho provato finora:

Modifica della porta in build.scala, ala documentazione: http://www.scalatra.org/guides/deployment/configuration.html Questo non compilare, perché la porta non è definito.

Modifica della porta in build.scala, ala questi due esempi: https: gist.github.com sonnecchiava 58af6cfbfe721a562a48 https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/sbt-test/web/servlet/project/Build.scala stesso problema: la porta non è definita

Ridefinire il punto di ingresso, ala http: www .scalatra.org guide distribuzione standalone.html Ancora viene eseguito sulla porta 8080

Modifica params init di bootstrap, ala http: www.scalatra.org guide di distribuzione configuration.html Ancora viene eseguito sulla porta 8080

Qualsiasi aiuto apprezzato. Non posso pubblicare più di 2 link per qualche motivo, quindi sostituisci gli spazi con barre in avanti per seguire gli URL.

Ecco il mio build.scala nel caso in cui aiuta.

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

Grazie ragazzi,

~ Erik

+0

Secondo i documenti, l'impostazione di build.scala è: 'port in container.Configuration: = 8081' ma lo si ha come' port in Conf: = 8081'. Hai provato esattamente come lo specificano nei documenti? – cmbaxter

+0

sì, ho provato anche questo – Kire321

risposta

14

Aggiornamento 2016/01/23: scalatra-sbt utilizza xsbt-web-plugin 2.0.4 e un paio di impostazioni modificate. Puoi trovare i documenti xsbt-web-plugin here (nota correlata: integrazioni per xsbt-web-plugin, sbt-web, docker e build standalone possono essere trovati in https://github.com/scalatra/scalatra-in-action, vedi capitolo09- * directory).

Per un'applicazione Scalatra ciò significa:

  • uso jetty:start, jetty:stop invece contenitore: avviare, contenitore: stop
  • abilitazione JettyPlugin
  • utilizzare nuove chiavi, ad esempio containerPort in Jetty := 8090, target in webappPrepare, sourceDirectory in webappPrepare
  • solo .scala definizione SBT accumulo base: utilizzare le importazioni corrette per importare l'impostazione chiavi

Una definizione di compilazione .sbt plug-in e:

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.Definizione SBT accumulo basato Scala non ha po 'meno la magia, e abbiamo bisogno di importare il plugin e le sue impostazioni:

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

La definizione di compilazione vero e proprio con enablePlugins(JettyPlugin) e una porta personalizzata:

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

} 

Assicurati di utilizzare le importazioni:

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

Con quelle importazioni è possibile utilizzare quindi il corretta chiave e configurazione:

port in container.Configuration := 9000 

questo va nel blocco settings:

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

scalatra-SBT si basa su xsbt-web-plugin le cui impostazioni sono documentati qui: https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

+0

Questo funziona perfettamente. Vedrò se riesco a convincerli ad aggiungere questo ai documenti ufficiali dal momento che il loro esempio non funziona senza di esso. – jlegler

+0

Queste importazioni non funzionano più: 'object xsbtwebplugin non è un membro del pacchetto com.earldouglas'. Qualche consiglio? –

+0

@AhmedFasih Ho aggiornato il post alle versioni più recenti di scalatra-sbt e xsbt-web-plugin. –

1

ho fatto questo e ha funzionato:

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

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

Ho creato un file build.sbt vuoto in th e radice del mio progetto e mettere:

port in container.Configuration := 8090

nel file per farlo funzionare.