我在SBT下有多模块项目。
Project A (库)有带有A配置参数的reference.conf文件,项目A依赖于带有自己的reference.conf文件的akka-actor库,Project A在自己的reference.conf中重新定义了akka的一些参数。
项目B依赖于A。
当我在ConfigFactory.load()中调用B时,reference.conf的合并顺序是错误的。它首先接受A的配置,然后应用akka-actor的配置,最后,我得到了akka-actor的初始配置。
我怎么才能修好它?我需要先加载akka-actor的配置,然后应用A的配置。
发布于 2015-07-30 15:22:55
好的,看起来我在ConfigFactory的源代码中找到了答案。
所有的reference.conf都是通过ClassLoader.getResources加载的。它返回java.util.Enumeration[URL]。这个枚举中URLs的顺序是这个问题的答案。因此,您需要做的就是:确保您的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方法。
https://stackoverflow.com/questions/31698605
复制相似问题