Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory_Java_Maven_Gradle_Jar_Slf4j - Fatal编程技术网

原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory

原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory,java,maven,gradle,jar,slf4j,Java,Maven,Gradle,Jar,Slf4j,java和slf4j的一些问题 使用idea制作项目,这样就可以了。但如果我想用gradle做罐子,我会遇到一些问题 格雷德尔先生 group 'test.test' version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'ju

java和slf4j的一些问题 使用idea制作项目,这样就可以了。但如果我想用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'
    }
}
jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    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");
    }
}
终端:

gradle build
java -jar target/HttpServer-1.0-SNAPSHOT.jar 
输出:

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
线程“main”java.lang.NoClassDefFoundError中的异常:org/slf4j/LoggerFactory 在HttpServerHH.Main.(Main.java:15) 原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory 位于java.net.URLClassLoader.findClass(URLClassLoader.java:381) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有一个
我尝试使用gradle/maven(mvn包)解决同样的问题。由于某些原因,它无法在类路径中找到Logger和LoggerFactory

JVM找不到类路径上的依赖项,因为它们显然不在类路径上。默认情况下,Gradle和Maven只将类添加到jar中,您必须使用
-cp
参数手动指定依赖项的路径。如果你想制作一个胖罐子,你可以和Gradle和Maven一起使用。

感谢Michael回忆起胖罐子。在你的评论试图谷歌:“gradlebuildfatjar”和修改我的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'
    }
}
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'
}
jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    manifest {
        attributes 'Main-Class': 'Test'
    }
}

logback核心丢失了。据我了解。另外,刷新依赖项右键单击project->Gradle->refresh dependency。它应该对你有用