10

これは基本的なことのように聞こえますが、実際には丸一日かかりました。開発中に、scalatra が実行されるポートを変更したいと考えています。私は hello world g8 テンプレートから始めて、そこから構築してきました。

これが私がこれまでに試したことです:

build.scala、ala ドキュメントのポートの変更: http://www.scalatra.org/guides/deployment/configuration.html ポートが定義されていないため、これはコンパイルされません。

build.scala のポートを変更します。以下の 2 つの例を ご覧ください。 servlet/project/Build.scala 同じ問題: ポートが未定義

エントリ ポイントの再定義、ala http: www.scalatra.org ガイドの展開 standalone.html ポート 8080 で引き続き実行

ブートストラップの init パラメータの変更、ala http: www.scalatra.org ガイドの配置 configuration.html 引き続きポート 8080 で実行

どんな助けでも感謝します。何らかの理由で 2 つ以上のリンクを投稿できないため、スペースをスラッシュに置き換えて URL をたどってください。

それが役立つ場合に備えて、これが私の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")
          )
        )
      }
    )
  )
}

みんなありがとう、

〜エリック

4

3 に答える 3

15

更新 23.01.2016: scalatra-sbtは xsbt-web-plugin 2.0.4 を使用し、いくつかの設定が変更されました。ここでxsbt-web-plugin ドキュメントを見つけることができます(関連ノート: xsbt-web-plugin、sbt-web、docker、およびスタンドアロン ビルドの統合はhttps://github.com/scalatra/scalatra-in-actionにあります) 、chapter09-* ディレクトリを参照してください)。

Scalatra アプリの場合、これは次のことを意味します。

  • jetty:start代わりに、jetty:stopcontainer:start、container:stop を使用してください
  • 有効JettyPlugin
  • 新しいキーを使用しcontainerPort in Jetty := 8090ますtarget in webappPreparesourceDirectory in webappPrepare
  • .scala ベースの SBT ビルド定義のみ: 正しいインポートを使用してプラグインと設定キーをインポートします

.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

.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-plugin に基づいて構築されており、その設定はここに記載されています: https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

于 2013-07-27T13:58:18.493 に答える
0

プロジェクトのルートに空の build.sbt ファイルを作成し、以下を配置しました。

port in container.Configuration := 8090

それが機能するためのファイルで。

于 2014-07-03T19:06:11.723 に答える