【发布时间】:2012-01-25 04:11:01
【问题描述】:
我的代码(Java)从 jar 中读取图像:
Main.class.getResourceAsStream("/res/logo.png")
一切运行良好(如果我在将应用程序打包到 jar 后启动应用程序)。但是当我使用 sbt 的 run 任务运行它时,它返回我 null 而不是需要的流。
从 sbt console 运行它也会给出 null:
getClass.getResourceAsStream("/res/logo.png")
有没有办法告诉 sbt 将我的资源放在类路径上?
编辑:
我将资源目录设置为与源目录相同:
build.sbt:
resourceDirectory <<= baseDirectory { _ / "src" }
当我加载 sbt 的 `console' 并运行以下内容时:
classOf[Main].getProtectionDomain().getCodeSource()
我获得了课程的位置,但它既不包含 res 文件夹也不包含我的任何资源文件。
似乎 sbt 仅将资源复制到生成的 jar 中,而不将它们复制到 classes 目录。我应该修改编译任务以将这些资源文件移动到类目录吗?
EDIT2:
是的,当我手动将资源文件复制到类目录时,我可以轻松地从控制台访问它。那么,我应该如何自动化这个过程呢?
EDIT3:
似乎 sbt 只是无法看到我的资源文件夹 - 实际上它并没有将文件添加到生成的 jar 文件中!
解决方案:
resourceDirectory in Compile <<= baseDirectory { _ / "src" }
【问题讨论】:
-
我使用来自 sbt 的
run、console和test的getResourceAsStream没有问题。也许更多细节会有所帮助。什么版本的sbt?文件位于何处(在另一个 .jar 或src/main/resources或其他中)?你有任何与资源相关的插件或配置吗? -
Sbt - 最新版本,今天下载(我认为是 0.11.2)。文件位于 src/res/logo.png。我在 build.sbt 中添加了“resourceDirectory
-
如果你按照约定将资源放入
src/main/resources会发生什么? -
@dave - 什么都没有。还是不行。