【问题标题】:Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory引起:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory
【发布时间】:2016-07-22 12:10:59
【问题描述】:

java 和 slf4j 的一些问题 使用idea制作项目,没关系。但如果我尝试用 gradle 制作 jar,我会遇到一些问题。

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");
    }
}

终端:

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

我尝试使用 gradle/maven (mvn package) 同样的问题。在类路径中找不到 Logger 和 LoggerFactory 的一些原因。

【问题讨论】:

    标签: java maven gradle jar slf4j


    【解决方案1】:

    感谢迈克尔想起了肥罐。在您的评论尝试谷歌:“gradle build fat jar”并修改我的 build.gradle 之后

    jar {
        from {
            configurations.compile.collect {
                it.isDirectory() ? it : zipTree(it)
            }
        }
        manifest {
            attributes 'Main-Class': 'Test'
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        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'
        }
        

        【讨论】:

        • logback-core 丢失。据我了解。还刷新依赖项右键单击项目-> Gradle->刷新依赖项。它应该适合你
        猜你喜欢
        • 2023-04-09
        • 2020-03-15
        • 2013-05-24
        • 2017-12-19
        • 2018-10-03
        • 2015-08-03
        • 2013-07-09
        • 2013-08-02
        • 2011-07-01
        相关资源
        最近更新 更多