Как копировать ресурсы с помощью scala + play + sbt

Я использую sbt [0.13] для компиляции проекта play [2.2] с использованием scala [2.10.3]. У меня есть файлы .sql и файлы scala, используемые для миграции базы данных. Структура каталогов выглядит так:

app
|-> db
     |-> migration
           |-> V1__init.scala
           |-> V2__newTable.sql

Когда я запускаю компиляцию с игровой консоли (REPL), файл scala (V1__init.scala) компилируется в .class и копируется в папку классов. Но файл .sql не перемещается.

Я пробовал добавить unmanagedResourceDirectories in Compile <++= baseDirectory { dir => Seq(dir/"app/db/migration") ++ Seq(dir/"db/migration") }, но файлы не копировались. Весь блок выглядит так:

val main = play.Project(appName, appVersion, appDependencies).settings(
    scalaVersion := "2.10.3",
    scalacOptions ++= Seq("-feature"),   // enable feature warnings
    unmanagedResourceDirectories in Compile <++=  baseDirectory { dir => Seq(dir/"app/db/migration") ++ Seq(dir/"db/migration") }
)

Я также пробовал использовать copyResources, но не смог заставить его работать. Описано здесь: http://www.playframework.com/documentation/2.0/SBTSettings.

Так кто-нибудь знает, как я могу скопировать файлы sql в папку классов?

Спасибо!

ОБНОВЛЕНИЕ

Я получил IO.copyDirectory(new java.io.File("app/db/migration"), new java.io.File("target/scala-2.10/classes/db/migration"), true) для копирования файлов, но место назначения жестко запрограммировано и изменится, когда я обновлю scala


person Jon    schedule 30.10.2013    source источник
comment
Рассматривали ли вы возможность использования встроенной поддержки для развития баз данных?   -  person wingedsubmariner    schedule 30.10.2013
comment
Да, есть, но похоже, что evolutions не поддерживает запуск произвольного кода scala, вместо этого ему нужны файлы .sql   -  person Jon    schedule 30.10.2013
comment
В качестве альтернативы вы можете поместить сценарии sql в каталог conf, чтобы он автоматически находился в пути к классам.   -  person Schleichardt    schedule 31.10.2013
comment
@Schleichardt Я думал об этом, но не думаю, что каталог conf автоматически компилируется, что необходимо для написания сценариев миграции на scala или java. Спасибо хоть   -  person Jon    schedule 31.10.2013


Ответы (1)


  val main = play.Project(appName, appVersion, appDependencies).settings(
    scalaVersion := "2.10.3",
    scalacOptions ++= Seq("-feature"),   // enable feature warnings
    unmanagedResourceDirectories in Compile <+= scalaSource in Compile,
    excludeFilter in unmanagedResources in Compile := "*.scala" || "*.java"
  )

Вы можете легко проверить содержимое папки класса с помощью:

 sbt clean full-classpath && ls target/scala-2.10/classes/db/migration/
person Schleichardt    schedule 30.10.2013
comment
Спасибо! Это почти сработало именно так, как мне было нужно. Мне нужно было добавить ".DS_Store" в список исключений, чтобы вся строка выглядела так: excludeFilter in unmanagedResources in Compile := "*.scala" || "*.java" || ".DS_Store" - person Jon; 31.10.2013