2011-10-10 67 views
6

我是新来的整个SBT和Scala场景,并试图建立一个使用Java/Scala类和Hibernate的项目。我得到的项目建设良好 - 我只需要手动将我的休眠配置文件复制到我的target/scala<version>/classes文件夹,以便它们可以通过休眠来拾取。在编译期间创建SBT任务来复制目录?

有没有办法在SBT中创建一个任务,以便在每次编译时复制这些文件夹?这是我的Build.scala文件:

import sbt._ 

object Sportsbook extends Build { 
    lazy val project = Project (
    "sportsbook", 
    file("."), 
    copyConfigTask 
) 

    val copyConfig = TaskKey[Unit]("copy", "Copy hibernate files over to target directory") 

    /* 
    // Something like this 
    lazy val copyConfigTask = copyConfig <<= 
    val configDir1 = baseDirectory/"config" 
    val configDir2 = outputPath/"config" 
    IO.copyDirectory(configDir1, configDir2) 
    */ 
} 

回答

12

的最直接手段实现这一目标是将文件移动到./src/main/resources/config

或者,将${base}/config添加到resourceDirectories in Compile

resourceDirectories in Compile <+= baseDirectory/"config" 

不幸的是,那里的文件会被复制到类路径的根目录。您需要将它们移动到./src/config/config才能恢复。 (请参阅mappings对资源的了解如何based on the relative location of resource files to the base resource directories

是否希望将文件打包到JAR中?这两个答案都会导致这种情况。你可以将它们从mappings in packageBin中取出来避免这种情况。

mappings in (Compile, packageBin) ~= (_.filter { case (file, outpath) => outpath.startsWith("/config")}) 
+0

谢谢 - 我刚刚第一次去。出于某种原因,我仅将我的头部资源与仅有的jar文件链接起来。这种方式更简单。 – user988427

+0

@ user988427你可以批准答案,因为它适用于你? –

相关问题