当前位置: 首页 > 知识库问答 >
问题:

使用Gradle找不到slf4j LoggerFactory类定义

朱越
2023-03-14

我正在尝试构建和运行一个在IntelliJ中使用slf4j日志记录的Spark网络服务器。它在最初用于添加日志记录的计算机上构建良好(也在IntelliJ中),但在我的机器上没有。

这是完整的<code>构建。gradle文件(请参阅项目(':webserver'),了解使用记录器的部分:

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "gradle.plugin.com.avast.gradle:docker-compose-gradle-plugin:0.3.27"
    }
}

subprojects {
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }

    apply plugin: "java"
    apply plugin: "idea"
    apply plugin: "checkstyle"
    apply plugin: "pmd"
    apply plugin: "findbugs"
    apply plugin: "application"
    apply plugin: "com.avast.gradle.docker-compose"

    checkstyle {
        configFile = "../config/checkstyle/checkstyle.xml" as File
        toolVersion = "6.0"
    }
}

project(':webserver') {
    mainClassName = "org.passport.webserver.WebServer"
    dependencies {
        compile project(':core')
        compile "com.sparkjava:spark-core:2.6.0"
        testCompile 'junit:junit:4.12'
        compile group: 'org.json', name: 'json', version: '20090211'
        compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.6.1'
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java/'
            }
        }
    }
}

project(':customsUI') {
    mainClassName = "org.passport.customsui.CustomsUI"
    dependencies {
        compile project(':core')
        testCompile 'junit:junit:4.12'
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java/'
            }
        }
    }
}

project(':handlerUI') {
    mainClassName = "org.passport.handlerui.HandlerUI"
    dependencies {
        compile project(':core')
        testCompile 'junit:junit:4.12'
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java/'
            }
        }
    }
}

project(':core') {
    mainClassName = "org.passport.core.PassPortChaincode"
    dependencies {
        compile 'io.grpc:grpc-all:0.13.2'
        compile 'commons-cli:commons-cli:1.3.1'
        compile 'org.glassfish:javax.json:1.1.0-M1'
        compile files('lib/shim-client-1.0.jar')
        testCompile 'junit:junit:4.12'
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java/'
            }
        }
    }
}

下面是使用记录器的代码:

package org.passport.webserver;

import org.passport.webserver.endpoints.ContainerClaimDao;
import org.passport.webserver.endpoints.PackageClaimDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static spark.Spark.before;
import static spark.Spark.get;
import static spark.Spark.path;
import static spark.Spark.post;

/**
 * The server matches requests (routs) and calls the appropriate endpoints.
 */
public final class Server {

    private static Logger logger = LoggerFactory.getLogger(Server.class);
    private static ContainerClaimDao containers = new ContainerClaimDao();
    private static PackageClaimDao packages = new PackageClaimDao();

    private Server() {

    }

    /**
     * Starts the router.
     * @param args run arguments
     */
    public static void main(String[] args) {
        path("/containers/:container-id", () -> {
            before("/*", (q, a) -> logger.info("Received api call: " + q.url() + "."));

            post("", (request, response) -> containers.add(request, response));

            get("/container-claims", (request, response) -> containers.get(request, response));

            get("/package-claims", (request, response) ->   packages.get(request, response));

        });
    }

}

这是我得到的错误:

"C:\Program Files\Java\jdk1.8.0_91\bin\java" -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_91\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar;C:\Users\lover\repositories\passport\webserver\build\classes\main;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.2.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.passport.webserver.Server
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.passport.webserver.Server.<clinit>(Server.java:18)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:123)
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)
    ... 4 more

我在StackOverflow上看了几个问题,但似乎都没有解决问题:

  • java.lang.NoClassDefFoundError:org.slf4j。LoggerFactory-我正在与gradle一起构建,我不认为我应该在类路径中下载/放置一些jar。
  • ClassNotFoundException:org.slf4j。LoggerFactory-同上
  • NoClassDefFoundError:org/slf4j/Logger-再次使用jar属性
  • 原因:java.lang.ClassNotFoundException:org.slf4j。LoggerFactory-我不确定“fat jars”/ShadowJar是否适用,也不确定如何修改我的构建文件以使用它们。
  • NoClassDefFoundError:org/slf4j/LoggerFactory创建runnable*时。jar与gradle-我多次尝试刷新gradle,重新启动IntelliJ,甚至重新启动我的计算机。
  • 线程“main”java.lang.NoClassDefFoundError中的Gradle异常:org/slf4j/LoggerFactory-见下文

我尝试了以下依赖项:

  • 编译组:'org.slf4j',名称:'slf4j-log4j12',版本:'1.6.1'
  • 编译'org.slf4j: slf4j-api: 1.7.24'编译'org.slf4j: slf4j-Simple: 1.7.24'
  • 编译组:'org.slf4j',名称:'slf4j-Simple',版本:'1.6.1'

这些似乎都没什么不同。有什么想法吗?

共有2个答案

太叔经赋
2023-03-14

我最终删除了我的Gradle缓存. gradle文件夹)并重新下载了所有内容,这解决了问题。

狄宪
2023-03-14

如果您正在使用Gradle,请将这2行添加到您的build.gradle依赖项中以使用Spark 2.6.0

编译"com.sparkjava: spark-core: 2.6.0"

编译组:'org.slf4j',名称:'slf4j-Simple',版本:'1.7.21'

 类似资料:
  • 这是我的build.gradle文件: 有什么办法解决这个问题吗?对于mainClassName属性,我尝试了各种方法,但似乎都不起作用。

  • 问题内容: 我将Javadoc doclet与gradle一起使用,因此需要使用package.tools.jar包,它位于jdk的lib文件夹中(本例中为1.6.0_26)。 关键是gradle不会自动获取它,因此我将那个工具包添加到我的libs文件夹中,然后将其添加到dependencies.gradle。 现在,我想直接从JDK主页将其带入我的dependencies.gradle。有没有办

  • 我创建了一个具有以下配置的gradle项目: 当我执行“gradle build”时,出现以下错误消息: 找不到系统Java编译器。确保安装了JDK(不仅仅是JRE),并配置了JAVA_HOME系统变量以指向相应的目录。 这很奇怪,因为我有$JAVA_HOME set:

  • 我将javadoc doclets与gradle一起使用,因此需要使用包tools.jar,它位于jdk的lib文件夹中(在我的示例中为1.6.0_26)。 重点是gradle不会自动获取它,所以我将这个工具包添加到我的libs文件夹中,然后将它添加到dependencies.gradle。 现在我想把它直接从JDK中放到Dependencies.gradle中。有办法做到这一点吗?我已经在我的依

  • 我有一个项目,我有apk,但我在calculate.java文件中更改了一个值,我想重建项目。但出现以下错误。我该怎么办?我不是android Studio开发人员,我只是一个新手。”找不到com.android.tools.build: gradle: 7.0.3。在以下位置搜索: https://dl.google.com/dl/android/maven2/com/android/tools

  • 我试着寻找类似的问题,但没有成功。 谢谢!