HOCON:多个 reference.conf 分辨率问题
HOCON: multiple reference.conf resolution issue
我在 SBT 下有一个多模块项目。
项目 A
(库)有 reference.conf
文件和 A
的配置参数。项目 A
依赖于 akka-actor
库,它附带自己的 reference.conf
文件。项目 A
在自己的 reference.conf
.
中重新定义了一些 akka
的参数
项目 B
取决于 A
。
当我在 B
中调用 ConfigFactory.load()
时,reference.conf
的合并顺序错误。它首先采用 A
的配置,然后在其上应用 akka-actor
的配置。最终,我得到了 akka-actor
的初始配置。
我该如何解决?我需要先加载 akka-actor
的配置,然后再应用我的 A
的配置。
好的,看来我在 ConfigFactory
的来源中找到了答案。
正在通过 ClassLoader.getResources
加载所有 reference.conf
。它returnsjava.util.Enumeration[URL]
。 URL
s 在这个枚举中的顺序就是问题的答案。所以您需要做的就是:确保您的 reference.conf
资源在此枚举中的顺序正确排列。
这是一个如何做到这一点的例子。首先,通过覆盖 getResources
方法创建您自己的 ClassLoader
版本:
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)
}
}
最后,使用您的 CustomClassLoader
实例调用 ConfigFactory
的 load
方法。
我在 SBT 下有一个多模块项目。
项目 A
(库)有 reference.conf
文件和 A
的配置参数。项目 A
依赖于 akka-actor
库,它附带自己的 reference.conf
文件。项目 A
在自己的 reference.conf
.
akka
的参数
项目 B
取决于 A
。
当我在 B
中调用 ConfigFactory.load()
时,reference.conf
的合并顺序错误。它首先采用 A
的配置,然后在其上应用 akka-actor
的配置。最终,我得到了 akka-actor
的初始配置。
我该如何解决?我需要先加载 akka-actor
的配置,然后再应用我的 A
的配置。
好的,看来我在 ConfigFactory
的来源中找到了答案。
正在通过 ClassLoader.getResources
加载所有 reference.conf
。它returnsjava.util.Enumeration[URL]
。 URL
s 在这个枚举中的顺序就是问题的答案。所以您需要做的就是:确保您的 reference.conf
资源在此枚举中的顺序正确排列。
这是一个如何做到这一点的例子。首先,通过覆盖 getResources
方法创建您自己的 ClassLoader
版本:
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)
}
}
最后,使用您的 CustomClassLoader
实例调用 ConfigFactory
的 load
方法。