【问题标题】:sbt native packager: cannot locate resource when executable is runsbt native packager:运行可执行文件时找不到资源
【发布时间】:2015-02-01 18:01:35
【问题描述】:

我正在开发一个使用 sbt-native-packager 和 akka_application 原型的应用程序。

我的目录结构如下:

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,但它仍然每次都会发生。我还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: scala sbt sbt-native-packager


    【解决方案1】:

    首先,我建议不要使用getClassLoader 来加载资源。尽量使用亲属路径,例如baseDirectory.value / "src" / "main" / "resources" 或更好的"resourceDirectory.value / "your-resources"

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

    #1 默认文件夹

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

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

    您可以在Adding ConfigurationGenerating Files 阅读更多详细信息。

    #2 手动使用辅助方法

    一个文件的简单方法很基础

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

    此外,您还有目录操作的助手。 请参阅Mappingshelper Docs 了解更多信息。

    【讨论】:

      【解决方案2】:

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

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

      默认情况下这个文件夹应该出现在/opt/docker/resources

      【讨论】:

        猜你喜欢
        • 2015-08-01
        • 2020-10-29
        • 2020-03-25
        • 1970-01-01
        • 2017-11-13
        • 2015-11-14
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多