3

我正在开发一个使用带有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,但它仍然每次都会发生。我应该用另一种方法来解决这个问题吗?

4

2 回答 2

1

首先,我建议不要使用getClassLoader加载资源。尝试始终使用亲属路径,likebaseDirectory.value / "src" / "main" / "resources"或 better "resourceDirectory.value / "your-resources"

对于sbt-native-packager有几种包含文件的方法。

#1 默认文件夹

只需将您somePrivateKey.p12放在以下文件夹中

  • src/universal/conf/适用于所有发行版(zip、deb、msi 等)
  • src/linux/conf/仅适用于 linux 发行版
  • src/windows/conf/仅适用于 windows 发行版

您可以在添加配置生成文件中更详细地了解这一点。

#2 手动使用辅助方法

一个文件的简单方法是非常基本的

mappings in Universal += resourceDirectory.value / "somePrivateKey.p12"

此外,您还有目录操作的助手。有关更多信息,请参阅Mappingshelper 文档

于 2014-12-06T09:39:07.143 回答
0

更新 Muki 上面为选项 #2 写的内容

mappings in Universal ++= directory("src/main/resources")

默认情况下,此文件夹应出现在/opt/docker/resources

于 2019-10-11T21:16:41.823 回答