如何在类路径中获取文件的文件位置

时间:2014-05-16 21:00:38

标签: scala sbt

我有以下场景,我有一些常见的文本文件(配置文件模板),许多项目需要将其作为构建的一部分包含在内

最简单的方法是将该文件放在某个项目的main/resources文件夹中,并通过依赖项包含该项目。

但是我需要该文件不仅仅在类路径中,它需要位于类路径之外的文件夹中,例如/ conf

我知道我可以使用映射选项,我知道映射的右侧,但左侧是什么?

e.g。

libraryDependencies += //some project that has /main/resouces/foo.conf in it   

mappings in Universal += classpathToFile("main/resources/foo.conf)  -> "conf/foo-external.conf"

我应该放什么而不是classpathToFile


编辑:我想我可以迭代整个类路径,例如

mappings in Universal ++= {
  val cp: Seq[File] = (fullClasspath in Runtime).value.files
  cp.filter(_.name.endsWith(".conf")).map(f => f -> "bin/" + f.name)
}

但我不确定这是最好的方式......

1 个答案:

答案 0 :(得分:1)

mappingsTuple2[File,String]的序列,其中文件部分表示某个文件(任何文件),字符串部分是生成的zip文件中的路径,文件将被打包到。

例如:

mappings in Universal += (file("build.sbt"),"foo/build.sbt")

这意味着根项目中的build.sbt文件将打包到名为foo的文件夹下生成的zip文件中。该文件可以是您想要的任何文件。

编辑:

另外,定义你所做的更好的方法是:

mappings in Universal <++= (fullClasspath in Runtime) map {
  cp => {
    cp.files.filter(_.name.endsWith(".conf")).map(f => f -> "bin/" + f.name)
  }
}