我正在开发一个使用带有akka_application
原型的sbt-native-packager的应用程序。
我的目录结构如下:
src/
main/
resources/
application.conf
somePrivateKey.p12
在我的代码中,我有一个方法将文件句柄返回到p12文件
def getSomePrivateKey: java.io.File = {
val cl = this.getClass.getClassLoader
val fileUrl = cl.getResource("somePrivateKey.p12")
new java.io.File(fileUrl.getFile())
}
当我通过sbt console
从命令行使用它时,它完美无缺。我可以像预期的那样轻松使用该文件。
但是,当我运行sbt stage
然后运行它创建的可执行文件时,我在尝试打开文件时得到FileNotFoundException
。
如何告诉sbt-native-packager将资源中的所有文件复制到创建的JAR的ClassPath上?我已阅读并重新阅读了sbt -native-packager文档,尝试将资源添加到Universal
,并且每次都会发生。还有另一种方法我应该接近这个吗?
答案 0 :(得分:1)
首先,我建议不要使用getClassLoader
来加载资源。请务必使用亲戚路径,例如baseDirectory.value / "src" / "main" / "resources"
或更好"resourceDirectory.value / "your-resources"
。
对于 sbt-native-packager ,有几种方法可以包含文件。
只需将somePrivateKey.p12
放入以下文件夹
src/universal/conf/
适用于所有发行版(zip,deb,msi等)src/linux/conf/
仅适用于Linux发行版src/windows/conf/
仅适用于Windows发行版您可以在Adding Configuration和Generating Files更详细地了解这一点。
一个文件的简单方法是非常基本的
mappings in Universal += resourceDirectory.value / "somePrivateKey.p12"
此外,您还有目录操作的帮助程序。 有关详细信息,请参阅Mappingshelper Docs。
答案 1 :(得分:0)
更新为Muki上面为选项#2写的内容
mappings in Universal ++= directory("src/main/resources")
默认情况下,此文件夹应显示在/opt/docker/resources