Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在类路径中获取文件的文件位置_Scala_Sbt - Fatal编程技术网

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

Scala 如何在类路径中获取文件的文件位置,scala,sbt,Scala,Sbt,我有下面的场景,我有一些常见的文本文件(配置文件模板),许多项目都需要将其作为构建的一部分 最简单的方法是将该文件放在某个项目的main/resources文件夹中,并通过依赖项包含该项目 然而,我需要的文件不只是在类路径中,它需要在类路径之外的文件夹中,例如/conf 我知道我可以使用映射选项,我知道映射的右侧,但左侧是什么 e、 g 我应该放什么来代替classpathToFile 编辑:我想我可以迭代整个类路径,例如 mappings in Universal ++= { val c

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

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

然而,我需要的文件不只是在类路径中,它需要在类路径之外的文件夹中,例如/conf

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

e、 g

我应该放什么来代替
classpathToFile


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

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

但我不确定这是不是最好的方法…

映射是一个
Tuple2[文件,字符串]
序列,其中文件部分表示某个文件(任何文件),字符串部分是生成的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)
  }
}
Universal中的
映射{
cp.files.filter(u.name.endsWith(“.conf”)).map(f=>f->“bin/”+f.name)
}
}

如果该文件不在您进行映射的当前项目中,那么它很可能是jar的一部分,不是吗?那你就得不到路径了。这只是一个猜测,但看起来你正在使用本机打包程序,你需要一个conf dir,这正是play所做的。如果您使用play,那么最好将代码放在
app
dir下,将配置文件放在
conf
dir下。play
dist
任务将为您处理打包…谢谢Gilad,但我没有使用play:)是的,我很清楚:)问题是我如何找到我知道在类路径中的原始文件。一定有个好办法找到那个文件。我想我需要试试getClass().getResource(…),刚刚意识到它…是的。。。看看类似的例子:我做了你编辑的东西,但没用。。。因为这些文件已经打包成一个JAR了。但是你提供的链接中的其他答案似乎很有希望,谢谢!如果将其打包为jar,则应使用packageBin中的
映射(或您可能使用的任何其他打包程序,如oneJar或assemply,…),而不是Universal中的
映射
mappings in Universal <++= (fullClasspath in Runtime) map {
  cp => {
    cp.files.filter(_.name.endsWith(".conf")).map(f => f -> "bin/" + f.name)
  }
}