5

默认情况下,Scalatra 期望“webapp”目录位于src/main/webapp. 如何将其更改为,例如content/doc-root

sbt 允许使用如下内容自定义其默认目录:

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

所以我认为这只是知道要使用的正确“配置密钥”的问题......

4

4 回答 4

4

资源文件夹是 Jetty 属性。如果您正在运行嵌入式 Jetty,则在此处指定。您可以手动编辑它或通过设置 PUBLIC 环境变量来覆盖它。

您也可以在您的 SBT 构建文件中覆盖它。它使用 xsbt-web-plugin 运行,您可以覆盖该插件的设置

于 2013-09-18T23:34:19.050 回答
4

@Kelsey Gilmore-Innis有正确的答案,但由于它不被接受,让我们打破它,打破它,打破它。

首先,我假设您正在按照入门指南使用g8. 希望和我刚得到的版本相同。

g8 scalatra/scalatra-sbt

该 g8 模板所做的是设置使用scalatra-sbt 0.3.2 插件的 sbt 0.13 构建:

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

这个插件内部使用JamesEarlDouglas/xsbt-web-plugin 0.4.0 来做 webapp 相关的设置。

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/webappcontent/doc-root重新加载 sbt,就应该这样了。

于 2013-10-05T04:39:08.853 回答
1

对于较新版本的 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" },
于 2014-11-18T18:17:40.127 回答
0

如果您不想更改 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))
  }
}

免责声明:您还应该检查它是否不会进入无限循环。

于 2016-02-24T20:48:27.770 回答