2017-05-16 63 views
3

我使用了SBT组件插件创建一个JAR文件中,我有以下文件夹结构:SBT大会包含conf文件的JAR

src 
-main 
    -scala 
    -resources 
    -application.conf 

现在,当我做

sbt clean assembly 

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

  1. 为什么inluded application.conf没有在最后罐的资源文件夹,但里面而它是在如下图所示(罐的内容)顶级

    -rw-r - r-- 1 joe staff 272B May 16 21:03 application.conf drwxr-xr-x 3 joe staff 102B May 16 21:03 com/ -rw-r - r-- 1 joe工作人员187B Mar 4 2016 library.properties drwxr-xr-x 3 joe工作人员102B May 16 21:03 typesafe/

  2. 如何加载此应用程序c通过设置一个System.property?例如,我希望能够通过设置系统属性一样来加载application.conf:

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

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

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

回答

0

这是我需要做的,使罐内的配置文件可以基于我从外面指定加载!

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

回答你的第一个问题是,资源文件夹就像一个src文件夹等内容被复制,而不是文件夹本身。