02/04/2013, 04:24
|
| Colaborador | | Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 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. |