来自Classpath的Scala getResource

时间:2014-03-16 19:47:13

标签: scala playframework-2.2

我的src / main / resources文件夹中有一个配置文件,我想加载它,我做的是:

  println(getClass.getClassLoader.getResource("db.conf"))
  val path = getClass.getClassLoader.getResource("db.conf").getPath
  val DB_CONFIG = ConfigFactory.parseFile(new File(path))
  println(DB_CONFIG)

  // Prepare the MongoDB Connection credentials
  val prepareMongoDBConfig: Option[(String, Int, String, String, String)] = for {

    host   <- Option(DB_CONFIG.getString("database_host"))
    port   <- Option(DB_CONFIG.getInt   ("database_port"))
    user   <- Option(DB_CONFIG.getString("database_user"))
    pass   <- Option(DB_CONFIG.getString("database_pass"))
    dbname <- Option(DB_CONFIG.getString("database_name"))
  } yield (host, port, user, pass, dbname)

db.conf位于src / main / resources文件夹下。我把它打包成一个jar,这个jar作为一个库包含在Play项目中。当我对它进行单元测试时,它工作正常,但是当从Play服务器中运行时,我会看到以下内容:

20:41:10.216 [play-internal-execution-context-1] INFO  play - Application started (Dev)
jar:file:/development/play-server/lib/server-core-1.0-SNAPSHOT.jar!/db.conf
Config(SimpleConfigObject({}))

可以看出SimpleConfigObject是空的。这是为什么?

1 个答案:

答案 0 :(得分:1)

哦,我想我明白了。您正在尝试将jar中的资源作为文件加载,但它不是文件,它是jar中的路径。当你没有打包成jar时它就有效,因为在这种情况下它是一个单独的文件。

或许尝试ConfigFactory.parseResources("db.conf")ConfigFactory.parseResourcesAnySyntax("db")

针对可能遇到此问题的其他人提供更一般的故障排除提示:

  • 尝试在启动prod版本时设置-Dconfig.trace=loads,并且可能在stderr上有一些有用的输出。
  • 使用jar xf解压缩jar并确保它在预期的位置具有预期的db.conf。