simple org loggerfactory logger log4j12 how example java maven slf4j

java - org - slf4j-log4j12 maven



Conflicto de versiĆ³n slf4j mientras se construye con Maven (3)

Como usted mismo descubrió, hay dos bibliotecas (Hibernate y algunas otras) que importan de forma transitoria SLF4J en dos versiones diferentes. Desafortunadamente, la versión anterior está siendo recogida por maven (hay algunas reglas cuya dependencia debe ser elegida por maven en esta situación). La solución es agregar la exclusion en la dependencia que importa la versión anterior de SLF4J ( com.example:foo-bar es un ejemplo aquí):

<dependency> <groupId>com.example</groupId> <artifactId>foo-bar</artifactId> <version>1.2.3</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>

Si aún experimenta este problema, emita:

$ mvn dependency:tree

Busque la versión 1.5.8 y exclúyala de todas las bibliotecas que la importan.

Me di cuenta de que uno de mis proyectos usa slf4j 1.5.8 y Hibernate usa slf4j 1.6. Mientras construye con Maven, descarga ambos archivos jar pero supongo que se usan los archivos de clase de 1.5.8. Entonces, cuando ejecuto el programa obtengo el siguiente error:

SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6]

En pom.xml he puesto

<dependencyManagement> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.1</version> </dependency> </dependencyManagement>

El 1.5.8 es parte de la dependencia, por lo que se descarga solo.


Excluir es bastante innecesario y quizás bastante engañoso. En su lugar, incluya explícitamente el slf4j-api con la versión deseada en el archivo pom de su proyecto . ¡Eso es!

Este enfoque aprovecha las reglas de transitividad de Maven: la declaración de dependencia más cercana gana.


Puedes excluir la versión incorrecta con algo como esto:

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.7.ga</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>