Конфликт handlebars-proto и logstash-logback-encoder slf4j
Мой проект использует handlebars-proto для привязки шаблонов к json. Также я пытаюсь использовать logstash-logback-encoder для входа в форму Json для logstash. Ниже приведены мои зависимости компиляции (наряду с другими зависимостями)
compile 'net.logstash.logback:logstash-logback-encoder:4.6'
compile 'com.github.jknack:handlebars-proto:4.0.5'
Если я удаляю руль, регистрация зависимостей работает нормально. Если руль присутствует, я получаю следующее предупреждение:
SLF4J: путь к классу содержит несколько привязок SLF4J. SLF4J: Обнаружена привязка в [jar:file:/C:/Users/manish/.gradle/caches/modules-2/files-2.1/com.github.jknack/handlebars-proto/4.0.5/5979737344d99e0d8b482e828f247ae86fd0113/handlebars-proto-4.0.5.jar!/Org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Обнаружена привязка в [jar:file:/C:/Users/manish/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.1.6/665e3de72f19ec66ac67d82612d7b8e6b3de3cd0/logback-classic-1.1.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: см. http://www.slf4j.org/codes.html для объяснения.
с последующей ошибкой:
Не удалось создать экземпляр [ch.qos.logback.classic.LoggerContext] Указанное исключение: java.lang.NoSuchMethodError: ch.qos.logback.core.spi.ContextAwareBase. (Lch / qos / logback / core / spi / ContextAware;) V на net.logstash.logback.composite.CompositeJsonFormatter.(CompositeJsonFormatter.java:106) на net.logstash.logback.composite.loggingevent.LoggingEventCompositeJsonFormatter.(LoggingEventCompositeJsonFormatter.java:28stlog.matst. Java:122) в net.logstash.logback.LogstashFormatter.(LogstashFormatter.java:118) в net.logstash.logback.LogstashFormatter.(LogstashFormatter.java:114) в net.logstash.logback.encoder.LogstashEncoder.createFor.java:31) по адресу net.logstash.logback.encoder.CompositeJsonEncoder.(CompositeJsonEncoder.java:48) по адресу net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder.(LoggingEventCompositeJsonEncoder.log.enlog.LogstashEncoder.(LogstashEncoder.java:27) в sun.reflect.NativeConstructorAccessorImpl.newInstance0(собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) в sun.reflect.DelegatingConstructorAccessorImpl.newInst.av.lang.mpl.java:526) на java.lang.Class.newInstance(Class.java:379) на ch.qos.logback.core.joran.action.NestedComplexPropertyIA.begin(NestedComplexPropertyIA.java:122) на ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) в ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:148) в ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) в ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
Я пытался исключить slf4j как транзитивную зависимость от руля, но это не помогло.
compile
('com.github.jknack:handlebars-proto:4.0.5'){
exclude module: 'slf4j-api'
}
Заранее спасибо за помощь. Дайте мне знать, если потребуется более подробная информация.
1 ответ
Сообщение об ошибке вызвано тем, что jar handlebars-proto содержит реализацию org.slf4j.impl.StaticLoggerBinder
, что означает, что у него есть реализация регистрации. Вы также пытаетесь добавить собственную реализацию ведения журнала Logback, и поскольку SLF4J не может использовать две системы ведения журнала одновременно, это вызывает недовольство.
Я не знаком с проектом handlebars, но я предполагаю, что у вашей библиотеки есть полноценное приложение, которое включает в себя систему ведения журналов и не предназначено для использования в качестве зависимости другим проектом. Возможно, есть другая доступная версия, которая является просто библиотекой, и которая не пытается включить свою собственную реализацию регистрации?