SLF4J Logback LoggerContext Конфликты - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю над развертыванием исполняемого файла jar для весенней загрузки для моего приложения.Я использую протоколирование SLF4J, и когда я собираю и запускаю внутри IntelliJ, у меня нет проблем.

Однако, когда я пытаюсь запустить .jar, из командной строки я получаю LoggerFactory не LogbackContext Logback, но Logback находится в исключении classpath .

Он жалуется на slf4j-log4j12-1.7.12.jar в двух местах /opt/mapr/lib/ и /opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/common/lib/.

Если я удаляю банку с обоих мести запустите мое приложение:

java -cp $(mapr classpath):MapRProducerApp-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.PropertiesLauncher

затем произойдет сбой запуска из-за SLF4J: не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder".

Я не понимаю, почему не получилось сказать, что не удалось загрузить класс slf4j, когда мои приложения .jar создаются с этой зависимостью через

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

В IntelliJ я добавляю все внешние зависимости, которыесуществуют в папке /opt/mapr/lib, которая включает в себя slf4j-log4j12-1.7.10.jar , но IntelliJ не выдает ошибку Logback LoggerContext.

Повторим здесь:

  • Сборка и запуск jar на собственных работах, но не удастся, потому что ему нужны зависимости, которые существуют внутри mapr classpath.
  • Запуск банка с mapr classpath завершается неудачно из-за банки slf4j внутри /opt/mapr/lib.
  • Удаление этой банки приводит к еще одной ошибке, касающейся банки slf4j в / opt / mapr/hadoop/hadoop-2.7.0/share/hadoop/common/lib/.
  • Удаление этого jar-файла приводит к сбою приложения, поскольку теперь оно не может найти привязку slf4j.

Что-то мне не хватает?Нужно ли мне упаковать свое приложение определенным образом, чтобы оно не включало зависимость SLF4J?

1 Ответ

0 голосов
/ 20 декабря 2018

Я не совсем понимаю вашу иерархию <dependencies>, но, добавив <exclusion>, вы можете просто разрешить конфликт.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
...