默认情况下,Scalatra 期望“webapp”目录位于src/main/webapp
. 如何将其更改为,例如content/doc-root
?
sbt 允许使用如下内容自定义其默认目录:
scalaSource <<= (baseDirectory)(_ / "src")
所以我认为这只是知道要使用的正确“配置密钥”的问题......
默认情况下,Scalatra 期望“webapp”目录位于src/main/webapp
. 如何将其更改为,例如content/doc-root
?
sbt 允许使用如下内容自定义其默认目录:
scalaSource <<= (baseDirectory)(_ / "src")
所以我认为这只是知道要使用的正确“配置密钥”的问题......
资源文件夹是 Jetty 属性。如果您正在运行嵌入式 Jetty,则在此处指定。您可以手动编辑它或通过设置 PUBLIC 环境变量来覆盖它。
您也可以在您的 SBT 构建文件中覆盖它。它使用 xsbt-web-plugin 运行,您可以覆盖该插件的设置。
@Kelsey Gilmore-Innis有正确的答案,但由于它不被接受,让我们打破它,打破它,打破它。
首先,我假设您正在按照入门指南使用g8
. 希望和我刚得到的版本相同。
该 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-web-plugin 变得相关的原因,即使您只想更改 Scalatra 的设置。您需要重新布线的设置称为webappResources in Compile
. 这是如何运作的?
要重新连接设置,请打开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,就应该这样了。
对于较新版本的 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" },
如果您不想更改 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))
}
}
免责声明:您还应该检查它是否不会进入无限循环。