【问题标题】:Creating SBT task to copy directories during compile?在编译期间创建 SBT 任务以复制目录?
【发布时间】:2011-12-04 20:29:03
【问题描述】:

我是整个 SBT 和 Scala 领域的新手,我正在尝试构建一个使用 Java/Scala 类和 Hibernate 的项目。我正在让项目构建得很好——我只需将我的休眠配置文件手动复制到我的target/scala<version>/classes 文件夹,这样它们就可以被休眠接收。

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

【问题讨论】:

    标签: hibernate scala sbt


    【解决方案1】:

    实现这一点最直接的方法是将文件移动到./src/main/resources/config

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

    resourceDirectories in Compile <+= baseDirectory / "config"
    

    不幸的是,那里的文件将被复制到类路径的根目录。您需要将它们移至 ./src/config/config 才能恢复。 (查看资源的mappingsbased 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")} )
    

    【讨论】:

    • 谢谢——我刚去了第一个。出于某种原因,我只用 jar 文件链接我的头部资源。这种方式简单得多。
    • @user988427 你能批准这个答案吗?
    猜你喜欢
    • 2013-06-30
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2010-11-02
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多