Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/04/2013, 04:24
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Slf4j, maven y scope

Hola:

Realmente los log que use tu código los necesitas en "compile", si no tienes la librería de log correspondiente en tu classpath de compilación, no compila.

Si pones runtime y compilas con maven, posiblemente tampoco compile. Otro tema es que generes tu proyecto eclipse o lo que sea con algo como "mvn eclipse:eclipse". Eclipse no entiende de runtime o compile, si está la dependencia, pone el jar y listo, por lo que eclipse funciona igual con runtime, compile, test o provided.

slf4j está pensado para lo siguiente. Tu haces una aplicación web (un war, por ejemplo) o una librería (un jar sin main) que pretendes que otros usen en sus aplicaciones. Estaría feo que ese war o librería usara y me obligara a usar log4j, por ejemplo, cuando yo en mi aplicación o servidor web no tengo log4j, o uso otra alternativa como el logging de java.

slf4j nace como un puente entre tu librería y un log de verdad como log4j. Tu usas en tu código slf4j y luego, cuando alguien use tu librería en su proyecto o despliegue tu war en su servidor, "conecta" tu slf4j con log4j (añadiendo el jar slf4j-log4j12.jar), de esta forma tu log se integra con el log que tenga el servidor web o la aplicación.

Es por eso que en tu proyecto maven sólo debes poner dependencia de slf4j-api como compile (si no lo haces así, tu código no compila) y dejar las dependencias de slf4j-log4j12 y log4j como "provided". Ni siquiera "runtime", porque si la pones "runtime", cuando maven genere tu war incluirá slf4j-log4j12 y log4j dentro del war, cosa que no queremos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación