#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. И это работает