2013-07-25 3 views
10

Cela semble basique, mais il m'a coûté une journée entière: Je veux changer pour changer le port sur lequel scalatra fonctionne, en développement. J'ai commencé avec le gabarit hello world g8, et j'ai construit à partir de là.Changement Scalatra Port

Voici ce que j'ai essayé jusqu'à présent:

Modification du port build.scala, ala documentation: http://www.scalatra.org/guides/deployment/configuration.html Cela ne compile pas, car le port est indéfini.

Modification du port build.scala, ala ces deux exemples: https: gist.github.com assoupit 58af6cfbfe721a562a48 https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/sbt-test/web/servlet/project/Build.scala Même problème: port est indéfini

Redéfinir le point d'entrée, ala http: www .scalatra.org guides de déploiement standalone.html fonctionne toujours sur le port 8080

Modification params init bootstrap, ala http: www.scalatra.org guides de déploiement configuration.html fonctionne toujours sur le port 8080

Toute aide appréciée. Je ne peux pas publier plus de 2 liens pour une raison quelconque, alors remplacez les espaces par des barres obliques pour suivre les URL.

Voici ma build.scala au cas où cela serait utile.

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

Merci les gars,

~ Erik

+0

Selon les docs, le paramètre build.scala est: 'port dans container.Configuration: = 8081' mais vous l'avez comme port dans Conf: = 8081'. Avez-vous essayé exactement comme ils le spécifient dans les docs? – cmbaxter

+0

oui, j'ai essayé aussi – Kire321

Répondre

14

Mise à jour 23/01/2016: scalatra-sbt utilise xsbt-web-plugin 2.0.4 et quelques paramètres ont été modifiés. Vous pouvez trouver les docs xsbt-web-plugin here (note connexe: les intégrations pour xsbt-web-plugin, sbt-web, docker et standalone peuvent être trouvées dans https://github.com/scalatra/scalatra-in-action, voir chapitre 09- * répertoires).

Pour une application Scalatra cela signifie:

  • utilisation jetty:start, jetty:stop à la place conteneur: démarrage, conteneur: arrêt
  • permettre l'utilisation de nouvelles clés, par exemple JettyPlugin
  • containerPort in Jetty := 8090, target in webappPrepare, sourceDirectory in webappPrepare
  • seulement .scala basé définition build SBT: utiliser les importations correctes pour importer le plugin et les touches de réglage

Une définition de construction .sbt:

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.définition de construction SBT base scala ne peu moins magique, et nous avons besoin d'importer le plug-in et ses paramètres:

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 définition de construction réelle avec enablePlugins(JettyPlugin) et un port personnalisé:

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

} 

Assurez-vous que vous utilisez les importations:

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

Avec ces importations, vous pouvez utiliser le clé correcte et configuration:

port in container.Configuration := 9000 

Cela va dans le settings bloc:

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

scalatra-SBT construit sur xsbt-web-plugin dont les paramètres sont documentés ici: https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

+0

Cela fonctionne parfaitement. Je vais voir si je peux les amener à ajouter cela aux documents officiels puisque leur exemple ne fonctionne pas sans elle. – jlegler

+0

Ces importations ne fonctionnent plus: 'object xsbtwebplugin n'est pas membre du package com.earldouglas'. Aucun conseil? –

+0

@AhmedFasih J'ai mis à jour le post sur les versions les plus récentes de scalatra-sbt et xsbt-web-plugin. –

1

Je l'ai fait et travaillé:

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

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

J'ai créé un fichier build.sbt vide dans racine e de mon projet et de mettre:

port in container.Configuration := 8090

dans le fichier pour qu'il fonctionne.

Questions connexes