log4j12 - Causado por: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
slf4j-log4j12 maven (3)
JVM no puede encontrar dependencias en classpath porque obviamente no están en classpath. De forma predeterminada, Gradle y Maven agregan solo sus clases a un jar y debe especificar rutas a las dependencias manualmente con el argumento -cp
. Si quieres construir un frasco gordo, puedes usar ShadowJar con Gradle y Shade con Maven.
algunos problemas con java y slf4j Proyecto hecho usando idea y está bien. Pero en caso de que intente hacer jar con Gradle, tengo algunos problemas.
build.gradle
group ''test.test''
version ''1.0-SNAPSHOT''
apply plugin: ''java''
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: ''junit'', name: ''junit'', version: ''4.11''
compile ''org.slf4j:slf4j-api:1.7.20''
compile ''ch.qos.logback:logback-classic:1.1.7''
}
jar {
manifest {
attributes ''Main-Class'': ''Test''
}
}
Test.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
LOGGER.info("info");
}
}
Terminal:
gradle build
java -jar target/HttpServer-1.0-SNAPSHOT.jar
Salida:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at HttpServerHH.Main.<clinit>(Main.java:15)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Traté de usar gradle / maven (paquete mvn) el mismo problema. Algunas razones por las que no puede encontrar Logger y LoggerFactory en classpath.
dependencies {
compile group: ''commons-collections'', name: ''commons-collections'', version: ''3.2''
testCompile group: ''junit'', name: ''junit'', version: ''4.+''
compile ''ch.qos.logback:logback-core:1.1.6''
compile ''ch.qos.logback:logback-classic:1.1.6''
compile ''org.slf4j:slf4j-api:1.7.18''
}
Gracias Michael por recordar sobre el frasco gordo. Después de tu comentario, traté de buscar en google: "gradle build fat jar" y luego modificó mi build.gradle
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes ''Main-Class'': ''Test''
}
}