【发布时间】:2018-08-15 13:02:24
【问题描述】:
我有一个使用 scala 和 sbt 的 spark 项目。在某一时刻,它引用了一个我想要打包的文本文件。 这是它在应用程序源中的引用方式:
getClass.getResource("/myFile.txt")
这很好用 sbt run 运行源代码。但我希望它被打包并部署到服务器上。
在 build.sbt 中,经过一番谷歌搜索后,我得到了这个工作
import NativePackagerHelper._
mappings in Universal ++= directory("src/main/resources")
添加这意味着 myFile.txt 出现在包的资源文件夹中。使用
创建sbt 通用:packageBin
生成的文件夹结构:
target - universal - bin
- lib
- resources
但是,当我从 bin/my-application.bat 运行打包的应用程序时,出现以下错误
线程“主”org.apache.spark.sql.AnalysisException 中的异常:路径不存在:文件:/C:/Software/my-application-0.0.1/lib/my-application-0.0.1。 jar!/myFile.txt;
请记住,我对部署基于 scala 或 jvm 的东西的经验为零,因此您可能不得不向我提供解释
编辑我后来意识到文本文件实际上包含在 .jar 文件中。 然后的问题是 getResource 在这种情况下不起作用,我不得不调整我的代码以使用 getResourceAsStream
【问题讨论】:
-
您是否在 jar 文件中获取资源中存在的任何内容(在目标目录下打包后创建的 jar)?在构建 jar(目标中的 SBT jar)后在您的系统中尝试使用 winzip 解压缩它,并尝试在不编译的情况下查找资源文件夹中存在的任何内容。您的文件应该存在于您的 jar 文件(您正在运行的 SBT jar)类路径中。