创建SBT任务以在编译期间复制目录?

时间:2011-10-10 21:22:52

标签: hibernate scala sbt

我是整个SBT和Scala场景的新手,我正在尝试构建一个使用Java / Scala类和Hibernate的项目。我正在让项目构建得很好 - 我只需要手动将我的hibernate配置文件复制到我的target/scala<version>/classes文件夹中,这样就可以通过hibernate获取它们。

有没有办法在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)
  */
}

1 个答案:

答案 0 :(得分: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")} )