HOCON:多个reference.conf解决问题

时间:2015-07-29 11:02:06

标签: hocon

我在SBT下有多模块项目。

项目A(库)具有reference.conf个文件,其中包含A的配置参数。项目A取决于akka-actor库,该库附带了自己的reference.conf文件。项目A在自己的akka中重新定义了reference.conf个参数。

项目B取决于A

当我在ConfigFactory.load()中呼叫B时,我的reference.conf合并顺序错误。首先需要A的配置,然后在其上应用akka-actor的配置。最终,我得到了初始akka-actor的配置。

我该如何解决?我需要首先加载akka-actor的配置,然后应该应用我的A配置。

1 个答案:

答案 0 :(得分:8)

好的,好像我在ConfigFactory的来源中找到了答案。

通过reference.conf加载了所有ClassLoader.getResources。它返回java.util.Enumeration[URL]。此枚举中URL s的顺序是问题的答案。所以您需要做的就是:确保正确安排此枚举中reference.conf资源的顺序。

以下是如何执行此操作的示例。首先,通过覆盖ClassLoader方法创建自己的getResources版本:

import scala.collection.JavaConverters._

class CustomClassLoader(loader: ClassLoader) extends ClassLoader(loader){
    override def getResources(name: String): util.Enumeration[URL] = {
        val resources = super.getResources(name).asScala.toList
        // arrange resources as you wish here
        java.util.Collections.enumeration(resources.asJava)
    }
}

最后,使用您的load实例调用ConfigFactory CustomClassLoader方法。