【问题标题】:Play 2.1 ConfigFactory.parseFile fails on substitutionPlay 2.1 ConfigFactory.parseFile 替换失败
【发布时间】:2013-01-28 12:41:42
【问题描述】:

在 application.conf 中(在 Play 2.0.4,sbt 0.11.3 中)我可以使用以下替换:

app {
  major = 0
  minor = 1
  revision = 62
  date = 0127
  version = ${app.major}.${app.minor}.${app.revision}.${app.date}
}

升级到 Play 2.1.0 和 sbt 0.12.2 并使用此 suggestion 进行 Build.scala,

val conf = ConfigFactory.parseFile(new File("conf/application.conf"))

play clean 时出错:

Caused by: com.typesafe.config.ConfigException$NotResolved: need to call resolve() on root config; tried to get value type on an unresolved substitution: ConfigSubstitution(${app.major}"."${app.minor}"."${app.revision}"."${app.date})
    at com.typesafe.config.impl.ConfigSubstitution.valueType(ConfigSubstitution.java:54)
    at com.typesafe.config.impl.DefaultTransformer.transform(DefaultTransformer.java:15)
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:118)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:135)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:140)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:108)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:146)
    at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:188)
    at ApplicationBuild$.<init>(Build.scala:12)
    at ApplicationBuild$.<clinit>(Build.scala)

根据播放配置documentation应该支持这种替换:

然而,实现必须小心,以允许对象引用 自己内部的路径。例如,这必须有效:

bar : { foo : 42, 巴兹:${bar.foo} 在这里,如果一个实现解决了 bar 中的所有替换作为解决替换 ${bar.foo} 的一部分,则会有一个 循环。实现必须只解析 bar 中的 foo 字段, 而不是递归整个 bar 对象。

任何想法如何解决这个问题?

【问题讨论】:

    标签: sbt playframework-2.1 typesafe-stack


    【解决方案1】:

    你的语法是正确的。正如错误消息所说,您实际上需要调用resolve()来解决替换问题。我猜在 2.0.x 中,play 框架做到了这一点,并提供了一个已经以这种方式解决的配置。现在直接使用config API,需要手动解析。

    在这一行添加对resolve()的调用:

    val conf = ConfigFactory.parseFile(new File("conf/application.conf")).resolve()
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    【解决方案2】:

    AFAIK,我对文档的理解是你应该使用类似的东西:

    app {
      major = 0
      minor = 1
      revision = 62
      date = 0127
      version = ${major}.${minor}.${revision}.${date}
    }
    

    我没有测试它...

    也许它在 2.0.4 下工作是因为一个错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      相关资源
      最近更新 更多