配置播放! 2.0将html文件从assets文件夹复制到公用文件夹?

时间:2013-01-13 02:52:47

标签: scala playframework-2.0

我目前正在使用Play构建网站! 2.0(2.1-RC2)框架和Scala。我有一堆“静态”html文件,用于定义AngularJS使用的视图(我更喜欢使用Jade,但我似乎无法找到一种方法让Jade通过Play / Scala进行预编译..这使得感觉,因为Jade模板通常不是静态的)。

对我来说最有意义的是,作为开发人员,我的项目结构是将这些html文件与我的咖啡和更少的文件(/ assets / *)放在同一个地方。我知道Play要我把它们放在我的公共文件夹中,但是我很难用它。对我来说,公用文件夹应该是库和生成的文件。

我想做的是以某种方式让Play将/ assets / views中的html文件复制到/ public / views作为构建的一部分。我怎么能做到这一点?

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

如果您将静态html文件放在public / htmls下,您可以通过以下方式获取您的模板中单个文件的路径:

@routes.Assets.at("htmls/yourfile.html")

答案 1 :(得分:0)

我能够在Scalatra测试项目中弄清楚如何执行此操作,因此我只需要修改以下代码以使其适应Play的文件夹结构。但它确实有效。它的作用是定义一个新的sbt“插件”,并在编译时将/ src / main / html中的任何文件复制到/ resource_managed / main / views。

希望有人会觉得这很有用!

import sbt._
import Keys._
import java.io.File
import org.apache.commons.io.FileUtils._

object CopyViews extends sbt.Plugin {
  import CopyViewsKeys._

  object CopyViewsKeys {
    val copy = TaskKey[Unit]("copy-views", "Copy views into resourceManaged.")
  }

  private def copyViewsTask = (streams, sourceDirectory in copy, resourceManaged in copy) map {
    (out, source, destination) =>
      out.log.info("Copying Views to " + destination.getAbsolutePath())
      copyDirectory(source, destination)
  }

  def copyViewsSettingsIn(c: Configuration): Seq[Setting[_]] =
    inConfig(c)(Seq(
      sourceDirectory in copy <<= (sourceDirectory in c) { _ / "html" },
      resourceManaged in copy <<= (resourceManaged in c) { _ / "views" },
      copy <<= copyViewsTask
    )) ++ Seq(
      compile in c <<= (compile in c).dependsOn(copy in c)
    )

  def copyViewsSettings: Seq[Setting[_]] = 
    copyViewsSettingsIn(Compile)
}

object ModFallBuild extends Build {
  import CopyViews._ // Import in our Build so we can use in our build.sbt file.

  lazy val modfall = Project("modfall", file("."))
}

现在,在我们的build.sbt文件中,我们可以添加

seq(copyViewsSettings:_*)

现在可以在编译时复制视图:)

可能有一种更简单的方法可以做到这一点,我敢肯定,但这对我有用,并且让我能够理解构建一个sbt插件! :P