Как можно изменить расположение каталога webapp для приложения Scalatra?

По умолчанию Scalatra ожидает, что каталог «webapp» будет находиться по адресу src/main/webapp. Как это можно изменить, например, на content/doc-root?

sbt позволяет настраивать свои каталоги по умолчанию, используя что-то вроде следующего:

scalaSource <<= (baseDirectory)(_ / "src")

Поэтому я предполагаю, что это просто вопрос знания правильного «ключа конфигурации» для использования...


person Chris W.    schedule 07.05.2013    source источник


Ответы (4)


У @Kelsey Gilmore-Innis есть правильный ответ, но поскольку он не принят, давайте сломаем его, сломаем, сломаем.

Во-первых, я предполагаю, что вы следуете руководству по началу работы для установки Scalatra с помощью g8. Надеюсь, та же версия, что я только что получил.

g8 скалатра/скалатра-sbt

Что сделал этот шаблон g8, так это настроил сборку sbt 0.13, которая использует scalatra-sbt 0.3. 2 плагин:

addSbtPlugin("org.scalatra.sbt" % "scalatra-sbt" % "0.3.2")

Этот плагин использует JamesEarlDouglas/xsbt-web-plugin 0.4.0 для создания веб-приложения. -сопутствующие настройки.

xsbt-веб-плагин 0.4.0

Вот почему xsbt-web-plugin становится актуальным, даже если вы просто хотите изменить настройку Scalatra. Настройка, которую необходимо перенастроить, называется webappResources in Compile. Как это работает?

перепрошивка webappResources

Чтобы изменить настройку, откройте project/build.scala. Добавлять

import com.earldouglas.xsbtwebplugin.PluginKeys.webappResources

к положениям об импорте. Затем измените настройки следующим образом:

  lazy val project = Project (
    "foo",
    file("."),
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ Seq(
      organization := Organization,
      name := Name,
      version := Version,
      scalaVersion := ScalaVersion,
      resolvers += Classpaths.typesafeReleases,
      webappResources in Compile := Seq(baseDirectory.value / "content" / "doc-root"),
      ...
    )
  )

Теперь переместите src/main/webapp в content/doc-root, перезагрузите sbt, вот и все.

person Eugene Yokota    schedule 05.10.2013

Папка ресурсов является свойством Jetty. Если вы используете встроенный Jetty, он указан здесь. Вы можете отредактировать его вручную или переопределить, установив переменную среды PUBLIC.

Вы также можете переопределить его в файле сборки SBT. Для запуска используется xsbt-web-plugin, и вы можете переопределить настройки этого плагина< /а>.

person Kelsey Gilmore-Innis    schedule 18.09.2013

Для более новой версии xsbt-web-plugin (1.0.0 на момент написания) способ изменения исходного пути отличается.

В первую очередь соответствующие настройки были перенесены в XwpPlugin.webappSettings. И вам нужны эти два

webappSrc in webapp <<= (baseDirectory in Compile) map { _ / "content" / "doc-root" },
webappDest in webapp <<= (baseDirectory in Compile) map { _ / "content" / "doc-root" },
person expert    schedule 18.11.2014

Если вы не хотите изменять настройки sbt, вы также можете сделать это программно, переопределив serveStaticResource и используя forward

override protected def serveStaticResource(): Option[Any] = {
  // check to see if we need to alter the path to find the TRUE disk url
  val incUrl = request.getRequestURI

  if(incUrl.startsWith("/otherDir")) {
    servletContext.resource(request) map { _ =>
      servletContext.getNamedDispatcher("default").forward(request, response)
    }
  } else {
     val trueUrl = "/otherdir" + incUrl
     Option(servletContext.getRequestDispatcher(trueUrl).forward(request, response))
  }
}

Отказ от ответственности: вы также должны убедиться, что он не переходит в бесконечный цикл.

person critium    schedule 24.02.2016