2016-04-02 7 views
3

einige Probleme mit Java und slf4j Projekt mit der Idee gemacht und es ist in Ordnung. Aber wenn ich versuche, ein Glas mit Gradle zu machen, habe ich ein paar Probleme.Verursacht von: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

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 

Ausgang:

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 

Ich habe versucht, Gradle/Maven (MVN-Paket) das gleiche Problem zu verwenden. Einige Gründe, warum Logger und LoggerFactory im Klassenpfad nicht gefunden werden können.

Antwort

3

Danke Michael für die Erinnerung an Fettglas. Nach Ihrem Kommentar versucht zu google: "Gradle Build Fettglas" und nachdem es meine Build.gradle

jar { 
    from { 
     configurations.compile.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
    manifest { 
     attributes 'Main-Class': 'Test' 
    } 
} 
1
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' 
} 
+0

Logback-Core wurde geändert. Nach meinem Verständnis. Aktualisieren Sie auch die Abhängigkeit mit der rechten Maustaste auf Projekt -> Gradle -> Abhängigkeit aktualisieren. Es sollte für Sie funktionieren – Deepak

+0

das gleiche Ergebnis – dmitryvim

2

JVM kann keine Abhängigkeiten vom Klassenpfad finden, da sie offensichtlich nicht im Klassenpfad sind. Standardmäßig fügen Gradle und Maven nur Ihre Klassen einem Jar hinzu, und Sie müssen Pfade zu den Abhängigkeiten manuell mit dem Argument -cp angeben. Wenn Sie ein Fettglas bauen möchten, können Sie ShadowJar mit Gradle und Shade mit Maven verwenden.

Verwandte Themen