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

use*_*427 6 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)
  */
}
Run Code Online (Sandbox Code Playgroud)

ret*_*nym 12

实现这一目标的最直接方法是将文件移入./src/main/resources/config.

或者,添加${base}/configresourceDirectories in Compile.

resourceDirectories in Compile <+= baseDirectory / "config"
Run Code Online (Sandbox Code Playgroud)

不幸的是,那里的文件将被复制到类路径的根目录.您需要移动它们./src/config/config才能恢复它.(请参阅mappingsfor资源如何基于资源文件与基本资源目录的相对位置)

您想要将文件打包在JAR中吗?这两个答案都会导致这种情况.你可以把它们拿走mappings in packageBin以避免这种情况.

mappings in (Compile, packageBin) ~= (_.filter { case (file, outpath) => outpath.startsWith("/config")} )
Run Code Online (Sandbox Code Playgroud)