Я работаю над развертыванием исполняемого файла 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?