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 ответ
Хорошо, потратив некоторое время копаться в источниках 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
пример.