我有一个基于SBT-Web和Play Framework的项目。好吧,Play仅用于开发,然后(在SBT / Activator中运行stage
命令时)所有内容都会导出到静态页面并部署到某些可能甚至不安装Java的Web服务器上。
我目前的做法是添加一个resourceGenerator:
resourceGenerators in Assets += Def.task {
for(year <- PageGenerator.Years) yield {
val file = (resourceManaged in Assets).value / "assets" / s"${year.year}.html"
println(s"Writing $file…")
IO.write(file, PageGenerator.forYear(year))
file
}
}.taskValue
现在可行,但它有一些缺点:
如何克服这些弊端? (第一个是最重要的。解决其他缺点是一个较小的好处。)
答案 0 :(得分:0)
好吧,找到了主要问题的解决方案:
Get assets to compile when running via "activator run" in Play
但是,它并没有解决其他问题,所以欢迎其他答案。
答案 1 :(得分:0)
对于遇到此问题的任何人,以下是@v6ak 提到的链接中解决方案的重要部分:
为了防止文件总是放在公共根目录中,即使它们放在子目录中,您还必须将任务输出的目录添加到 resourceDirectories
。
val taskOutputDir = settingKey[File]("Resource directory for task output")
taskOutputDir := (resourceManaged in Assets).value / "my-task"
// ADD THIS to preserve directory structure
resourceDirectories in Assets += taskOutputDir.value
resourceGenerators in Assets += Def.task {
// Generate your assets and output them to 'taskOutputDir'
// return a Seq[File] of the generated files
}.taskValue