我在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
配置。
答案 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
方法。