9

我在 SBT 下有多模块项目。

项目A(库)具有reference.conf带有A配置参数的文件。项目A依赖于akka-actor库,它带有自己的reference.conf文件。项目在 own 中A重新定义了一些akka参数reference.conf

项目B取决于A.

当我打电话ConfigFactory.load()B,我得到了错误reference.conf的合并顺序。它首先需要A' 的配置,然后akka-actor在其上应用 ' 的配置。最终,我得到了 initialakka-actor的配置。

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

4

1 回答 1

10

好的,看起来我已经在ConfigFactory.

所有的reference.conf都是通过ClassLoader.getResources. 它返回java.util.Enumeration[URL]。这个枚举中 s 的顺序URL就是问题的答案。因此,您需要做的就是:确保您的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方法。ConfigFactoryCustomClassLoader

于 2015-07-30T15:22:55.597 回答