Исключение Gradle в потоке "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

Я пытался заставить это работать в течение трех дней в моем проекте и создал простой проект для тестирования. Я искал вокруг очень похожие проблемы здесь, но не нашел ничего, что помогло бы с тем, как решить ошибку, которую я получаю. Я даже переформатировал мою Fedora 25, так как она работает на Windows 10, но все еще ничего. Я также включил в настройках и других настройках обработку аннотаций Intellij-2016.3.4, которая согласно другим ответам должна была исправить это, но это ничего не меняет. Пожалуйста, любая помощь будет оценена!!!

Исключение в потоке "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory в com.sammy.CheckLog.(CheckLog.java:8). Вызвано: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory в java.URLClassLoader.findClass(URLClassLoader.java:381) в java.lang.ClassLoader.loadClass(ClassLoader.java:424) в com.intellij.rt.execution.application.AppMain.main(AppMain.java:123)sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) на java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... еще 1

import lombok.extern.slf4j.Slf4j;

    @Slf4j
    public class CheckLog {

        public static void main(String... args){
            log.info("I'm Here!! ");
        }
    }

Ниже мой файл build.gradle с определенным lombok вместе со связанными зависимостями slf4j.

 /*
 * This build file was generated by the Gradle 'init' task.
 *
 * This generated file contains a commented-out sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/3.4/userguide/tutorial_java_projects.html
 */

// Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'com.sammy.CheckLog'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    compileOnly 'org.slf4j:slf4j-api:1.7.24'
    compileOnly 'org.slf4j:slf4j-simple:1.7.24'
    compileOnly 'org.projectlombok:lombok:1.16.14'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile 'junit:junit:4.12'
}

ОБНОВЛЕНИЕ: после изменения на "compile", он запускается из командной строки, а не из Intellij, поскольку кажется, что он использует собственную среду выполнения для интерпретации, в то время как gradle использует ту, которую я определил. jdk1.8.0_121

3 ответа

Решение

Проблема в том, что вы не добавили файлы JAR SL4J во время выполнения, потому что вы использовали их только для компиляции. Измените файл build.gradle для зависимостей SLF4J на compile вместо compileOnly:

compile 'org.slf4j:slf4j-api:1.7.24'
compile 'org.slf4j:slf4j-simple:1.7.24'

У меня есть некоторые проблемы. IntelliJ Idea 2016.3 и Gradle 3.4.1

Инициализировал новый проект с:

gradle init --type java-application

добавили пару строк в build.gradle

compile 'org.slf4j:slf4j-api:1.7.24' compile 'org.slf4j:slf4j-simple:1.7.24'

добавлена ​​строка в App.java:

... static Logger logger = LoggerFactory.getLogger(App.class); ...

И теперь у вас есть ошибка в идее, но в терминальном проекте будет работать нормально (с Gradle Run)

Ошибка в IntelliJ Idea

Обновление: я обнаружил, что если я инициализирую проект с Gradle 3.3 (не 3.4.1), то ошибка оставить. Может быть, такое поведение связано с этой проблемой: https://youtrack.jetbrains.com/issue/IDEA-167412

Изменить: compileOnly 'org.slf4j:slf4j-api:1.7.24' в compile 'org.slf4j:slf4j-api:1.7.24'

Другие вопросы по тегам