Scala Sbt程序集在JAR中包含Conf文件

Scala Sbt程序集在JAR中包含Conf文件,scala,jar,sbt-assembly,Scala,Jar,Sbt Assembly,我正在使用sbt汇编插件创建一个JAR文件,我有以下文件夹结构: src -main -scala -resources -application.conf 现在,当我 sbt clean assembly 我可以在生成的Jar文件中看到application.conf文件包含在内。我有两个问题: 为什么inluded application.conf不在最终Jar的resources文件夹中,而是在顶层,如下所示(Jar的内容) 如何通过设置System.propert

我正在使用sbt汇编插件创建一个JAR文件,我有以下文件夹结构:

src
 -main
  -scala
  -resources
    -application.conf
现在,当我

sbt clean assembly
我可以在生成的Jar文件中看到application.conf文件包含在内。我有两个问题:

  • 为什么inluded application.conf不在最终Jar的resources文件夹中,而是在顶层,如下所示(Jar的内容)

  • 如何通过设置System.property来加载此application.conf?例如,我希望能够通过设置如下系统属性来加载application.conf:

    System.setProperty(“config.file”、“application.default.conf”)

  • 有了它,我可以从外部控制(运行jar文件时),使用哪个配置文件。当我尝试这个时,我得到了一个NulPointerException:

    val someConfigFile = Option(System.getProperty("config.file"))
    ConfigFactory.parseURL(getClass.getResource(someConfigFile.get)) // NullPointerException happens here...
    

    下面是我需要做的事情,以便可以根据我从外部指定的内容加载jar中的配置文件

      val is = new InputStreamReader(getClass.getResourceAsStream(s"/$cfgFile"))
      ConfigFactory.parseReader(is).resolve()
    

    第一个问题的答案是资源文件夹类似于src文件夹,因此复制的是内容,而不是文件夹本身

      val is = new InputStreamReader(getClass.getResourceAsStream(s"/$cfgFile"))
      ConfigFactory.parseReader(is).resolve()