Ошибка при использовании mvn spring-boot: run;но не с помощью java-jar или intelliJ - PullRequest
0 голосов
/ 19 декабря 2018

mvn clean install - успешная сборка.

java -jar - приложение успешно работает.

mvn spring-boot: run - выдает ошибку:

Обнаружил как log4j-over-slf4j.jar, так и связанный slf4j-log4j12.jar на пути к классам, исключив StackOverflowError.См. Также http://www.slf4j.org/codes.html#log4jDelegationLoop для получения более подробной информации.

[INFO] Building Application 3.1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) > test-compile @ service-app >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ service-app ---`enter code here`
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ service-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ service-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\name\workspace\project\service-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ service-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) < test-compile @ service-app <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) @ service-app ---
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/name/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/name/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
[WARNING]
java.lang.reflect.InvocationTargetException

Что такое mvn spring-boot: работает по-другому?

[ОШИБКА]Не удалось выполнить цель org.springframework.boot: spring-boot-maven-plugin: 2.1.1.RELEASE: выполнить (default-cli) в проекте service-app: во время выполнения возникла исключительная ситуация.null: InvocationTargetException: ExceptionInInitializerError: Обнаружено как log4j-over-slf4j.jar, так и связанный slf4j-log4j12.jar на пути к классам, что исключает StackOverflowError.Смотрите также http://www.slf4j.org/codes.html#log4jDelegationLoop для более подробной информации.-> [Помощь 1]

Ответы [ 2 ]

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

В вашем приложении у вас есть 2 типа регистраторов.

1 SLF4J (только абстракция, фактическая регистрация не выполняется, поэтому вы можете переключаться на разные реализации)

2 Log4j1 (это - реализация, фактическое ведение журнала осуществляется этим)

В вашем приложении происходит

slf4j-log4j12.jar - этот jar будет направлять любой вызов, сделанный регистраторам slf4j (org.slf4j.Logger), вlog4j1.

log4j-over-slf4j.jar - этот jar будет направлять любой вызов, сделанный регистраторам log4j (org.apache.log4j.Logger), в slf4j. (Этот jar обычно используется, когда ваше приложение закодировано с регистраторами log4j, и вы хотите перенаправить все тепротоколирование вызовов в SLF4J, так что вы можете изменить каркас журналирования на SLF4J без какого-либо изменения кода).

когда вы используете оба этих jar-файла в classpath, он передает события журналирования между slf4j -> log4j и log4j --> slf4j, поэтому возникает исключение переполнения стека.

В зависимости от ваших требований, хотите ли вы использовать slf4j, или log4j, или log4j-over-slf4j, или slf4j с log4j, вам нужно выбрать правильные зависимости, доступные в пути к классам.Для решения вашей проблемы вам необходимо исключить slf4j-log4j12.jar или log4j-over-slf4j.jar из вашего пути к классам.

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

Обнаружил как log4j-over-slf4j.jar, так и связанный slf4j-log4j12.jar на пути к классам, исключив StackOverflowError.См. Также http://www.slf4j.org/codes.html#log4jDelegationLoop для получения более подробной информации.

Вы видите это, потому что у вас есть несколько реализаций SLF4J Logger в вашем пути к классам.Вам нужно будет очистить файл POM и сохранить только одну реализацию.

Вы можете попробовать исключить конфликтующие зависимости,

<exclusions>
  <exclusion> 
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
  </exclusion>
  <exclusion> 
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
  </exclusion>
</exclusions> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...