2013-10-30 48 views
3

我正在使用sbt [0.13]使用scala [2.10.3]編譯play [2.2]項目。我有用於數據庫遷移的.sql文件和scala文件。該目錄結構如下:如何用scala複製資源+ play + sbt

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

當我運行從遊戲控制檯(REPL)編譯,斯卡拉文件(V1__init.scala)被編譯成一個.class並複製到classes文件夾。但.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文件複製到類文件夾?

謝謝!

UPDATE

IO.copyDirectory(new java.io.File("app/db/migration"), new java.io.File("target/scala-2.10/classes/db/migration"), true)複製的文件,但目標是硬編碼的,當我更新將改變斯卡拉

+0

你有沒有考慮過使用[內建支持數據庫的演變](http://www.playframework.com/documentation/2.3-SNAP SHOT /演變)? – wingedsubmariner

+0

是的,但它看起來像evolutions不支持運行任意scala代碼,而是它需要.sql文件 – Jon

+0

您可以選擇將sql腳本放入conf目錄,以便它自動在類路徑中。 – Schleichardt

回答

0
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/ 
+0

謝謝!這幾乎完全符合我的需要。我需要將''.DS_Store''添加到排除列表中,所以完整的行如下所示:'編譯中的unmanagedResources中的excludeFilter:=「* .scala」|| 「* .java」|| 「.DS_Store」' – Jon