maven-2 - pattern - slf4j-log4j12 maven
SLF4J: la ruta de clase contiene mĂșltiples enlaces SLF4J (9)
... org.codehaus.mojo cobertura-maven-plugin 2.7 prueba ch.qos.logback herramientas logback-classic com.sun ...
## Lo arreglé con esto
... org.codehaus.mojo cobertura-maven-plugin 2.7 prueba ch.qos.logback herramientas logback-classic com.sun ...
Me aparece el siguiente error. Parece que hay varios marcos de registro vinculados a sl4j. No estoy seguro de cómo resolver esto. Cualquier ayuda es muy apreciada.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
El error probablemente da más información como esta (aunque los nombres de tu jar podrían ser diferentes)
SLF4J: Enlace encontrado en [jar: file: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder .class] SLF4J: Enlace encontrado en [jar: file: / D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar ! /org/slf4j/impl/StaticLoggerBinder.class]
Advirtió que el conflicto proviene de dos jarrones, denominados logback-classic-1.2.3
y log4j-slf4j-impl-2.8.2.jar
.
Ejecute mvn dependency:tree
en este proyecto pom.xml parent folder, dando:
Ahora elija la que desea ignorar (podría consumir un esfuerzo delicado Necesito más ayuda sobre esto)
Decidí no usar el importado desde spring-boot-starter-data-jpa
(la dependencia superior) a través de spring-boot-starter
y hasta spring-boot-starter-logging
, pom se convierte en:
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
en la parte superior, pom spring-boot-starter-data-jpa
usaría el spring-boot-starter
configurado en el mismo archivo, que excluye el logging
(contiene el logback
)
Este problema tomó un día completo para mí. Finalmente decidí usar un truco no tan bueno. Simplemente ponga una de las siguientes dependencias maven al principio de su archivo pom.xml. Utilice cualquiera de los archivos.slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar, debería hacer el trabajo. Tenga en cuenta, use los últimos frascos de maven. Aquí hay un enlace ! Es una buena lectura. Para entenderlo, tenía que eliminar los archivos jar slf4j creados en el repositorio local (en mi carpeta de casos denominada ".m2") y ejecutar su proyecto como Maven clean y Maven instalar y observar todos los archivos maven que se están descargando. Y sabrá cómo JVM está eligiendo el último (jar) para nuestro programa. Para comprender mejor, elimine la dependencia de POM del archivo pom.xml y vaya de nuevo al repositorio local y elimine todos los archivos jar SLF4J y vuelva a ejecutar el proyecto como Maven clean y maven install, y asegúrese de que esté atento a las descargas que están pasando por maven, y luego ejecuta tu aplicación para ver el efecto. Puede observar que el error o la excepción no se aplicará al colocar o mencionar la dependencia al principio, porque JVM está mirando el primer jar de nuestro proyecto que llega primero. Pero este movimiento no es bueno. Yo diría usar la exclusión en las API o jar donde encuentres que una API particular está descargando el jar slf4j. Algo que noté fue que algunos archivos jar (por ejemplo: anotaciones de hibernación, etc.) están descargando slf4j cuando construimos el proyecto de maven. Y esa es la razón por la que se inyectan múltiples frascos slf4j en nuestro proyecto. Espero que esto ayude. Esta es solamente mi experiencia.
La versión de Gradle;
configurations.all {
exclude module: ''slf4j-log4j12''
}
Parece eliminar el directorio .m2 y:
mvn install -DskipTests -T 4
resolvió este problema para mí.
Se resolvió agregando la siguiente exclusión en las dependencias (de pom.xml) que causaron el conflicto.
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
Solo usa solo la dependencia requerida, no todas :))). Para mí, para el trabajo normal del proceso de registro necesita esta dependencia excluir otros de pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.8</version>
</dependency>
Versión Sbt:
Adjuntar exclude("org.slf4j", "slf4j-log4j12")
a la dependencia que transitively incluye slf4j-log4j12
. Por ejemplo, al usar Spark con Log4j 2.6:
libraryDependencies ++= Seq(
// One SLF4J implementation (log4j-slf4j-impl) is here:
"org.apache.logging.log4j" % "log4j-api" % "2.6.1",
"org.apache.logging.log4j" % "log4j-core" % "2.6.1",
"org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
// The other implementation (slf4j-log4j12) would be transitively
// included by Spark. Prevent that with exclude().
"org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)