Отсутствует класс при выполнении jar: NoClassDefFoundError

#gradle #build #jar #noclassdeffounderror

#gradle #сборка #jar #ошибка noclassdeffounderror

Вопрос:

создание исполняемого файла jar в Intellij IDEA с использованием Gradle. Я создал исполняемый файл путем сборки. Однако существует проблема с загрузкой класса при выполнении, см. Сценарий и сообщение об ошибке ниже. Мне не хватает еще каких-то настроек?

build.gradle

 buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
    }
}
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'

group 'com.company.project'
version '1.0-SNAPSHOT'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation 'com.google.guava:guava:30.0-jre'
}

jar {
    manifest {
        attributes 'Main-Class': 'com.company.model.Main'
    }
}

 

Сообщение об ошибке

 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Dfile.encoding=UTF-8 -jar /home/user/Documents/Java/Projects/project/build/libs/project-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Table
    at com.company.model.Main.main(Main.java:6)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Table
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
 

Комментарии:

1. В документе shadow plugin говорится, что вы должны запускать application-shadow.jar , а не application.jar . Здесь вы запускаете project-1.0-SNAPSHOT.jar . Найдите -shadow jar и запустите его вместо этого. Кроме того, вы должны исправить свои теги, чтобы отразить это соответствующим образом.

2. да, это правда, я использовал shadow для компиляции вместо gradle. В основном используйте shadowJar для создания файла jar. И это работает