默认情况下,Scalatra希望“webapp”目录位于src/main/webapp
。如何将其更改为例如content/doc-root
?
sbt允许使用以下内容自定义其默认目录:
scalaSource <<= (baseDirectory)(_ / "src")
所以我认为只需要知道使用正确的“配置密钥”......
答案 0 :(得分:4)
资源文件夹是Jetty属性。如果您正在运行嵌入式Jetty,则会指定here。您可以手动编辑它,也可以通过设置PUBLIC环境变量来覆盖它。
您也可以在SBT构建文件中覆盖它。它使用xsbt-web-plugin运行,并使用can override that plugin's settings。
答案 1 :(得分:4)
@Kelsey Gilmore-Innis有正确的答案,但由于它不被接受,让我们打破它,打破它,打破它。
首先,我假设您正在关注Getting started guide以使用g8
安装Scalatra。希望我得到的版本相同。
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相关的设置。
这就是为什么即使您只想更改Scalatra的设置,xsbt-web-plugin也会变得相关。您需要重新连接的设置称为webappResources in Compile
。这有什么作用?
要重新设置该设置,请打开project/build.scala
。添加
import com.earldouglas.xsbtwebplugin.PluginKeys.webappResources
到import子句。然后按如下方式更改设置:
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,应该是它。
答案 2 :(得分: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" },
答案 3 :(得分:0)
如果您不想更改sbt设置,您也可以通过覆盖serveStaticResource并使用转发
以编程方式执行此操作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))
}
}
免责声明:您还应该检查它是否会进入无限循环。