1

我正在使用 Scalate Jade 并使用 sbt 0.11.0 开发一个 Scalatra Web 应用程序

我一直在用“com.github.siasia”%%“xsbt-web-plugin”%“0.1.2”打包网络应用程序。

我也一直在尝试使用 "com.zentrope" %% "xsbt-scalate-precompile-plugin" % "1.6" 来编译 Jade 文件。

不幸的是,如果我使用 xsbt-web-plugin 来打包我的战争,它会从任何预编译的 Scalate 文件中清除目标目录。

用预编译的 Scalate 文件打包战争的最佳方法是什么?

4

2 回答 2

1

感谢xsbt-scalate-precompile-plugin的作者 Keith Irwin,我现在有了解决问题的方法。

我的 Jade/Scalate 文件位于 webapp/WEB-INF/template 和 webapp/WEB-INF/scalate/layouts 目录中。

我正在使用 xsbt-web-plugin 和 xsbt-scalate-precompile-plugin sbt 插件。

  • xsbt-web-plugin 为我提供了 package-war 命令。
  • xsbt-scalate-precompile-plugin 预编译我的 Jade 文件。

在我的 plugins.sbt 文件中。

resolvers += "Web plugin repo" at "http://siasia.github.com/maven2"    
addSbtPlugin("com.github.siasia" %% "xsbt-web-plugin" % "0.1.2")

resolvers += "zentrope" at "http://zentrope.com/maven"    
addSbtPlugin("com.zentrope" %% "xsbt-scalate-precompile-plugin" % "1.7")

在我的 build.scala 文件中。

import WebPlugin._
import Keys._
import com.zentrope.ScalatePlugin._

...

// WebApp Settings
val webAppSettings = Seq(
  jettyPort := 8083,
  jettyContext := "/MyWebApp"
)

// Scalate Compile Settings
val scalateCompileSettings = scalateTemplateSettings ++ Seq(
  scalateTemplateDirectories in Compile <<= (scalateTemplateDirectories in Compile, baseDirectory) {
    (dirs, basedir) => dirs ++ Seq(new File(basedir, "/src/main/webapp/WEB-INF/template"),
      new File(basedir, "/src/main/webapp/WEB-INF/scalate/layouts"))
  }
)

...

lazy val MyWebApp =
    Project("MyWebApp", file("MyWebApp"), settings = shared ++ webAppSettings ++ scalateCompileSettings ++ Seq(
      resolvers ++= Seq(sonatypeNexusReleases, scalaToolsNexus, novusRels, scalaToolsSnapshots),
      libraryDependencies ++= Seq(
        scalatra,
        scalate,
        ...
      )
    ))

The 1.7 version of Keiths' plugin allows for the setting of specific template directories which is what I really needed. The only caveat is that I must do a clean right before I call package-war or my compiled Jade files get removed.

于 2012-01-10T10:54:38.390 回答
0

我不确定我在这里理解你。任何来源都应该在src. 一个人永远不应该把任何东西放进去target。资源自然会进入src/main/resources。那么,这些“预编译”文件是自动生成的,还是应该在资源目录中?

于 2011-12-14T18:38:05.070 回答