Clase perdida por la ejecución del frasco: NoClassDefFoundError
construir un frasco ejecutable en Intellij IDEA, utilizando Gradle. He creado un archivo ejecutable por el montaje. Sin embargo hay un problema con la carga de clase en ejecución, vea el script y el mensaje de error a continuación. ¿Me estoy perdiendo algunos ajustes más?
Construir. gris
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'
}
}
Mensaje de error
/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)
Pregunta hecha hace 3 años, 4 meses, 29 días - Por geekglitcher1735
2 Respuestas:
-
El error "NoClassDefFoundError" indica que la clase "com.google.common.collect.Table" no pudo ser encontrada en tiempo de ejecución. Este problema suele ocurrir cuando la dependencia no está incluida en el archivo JAR final que se está ejecutando. En el caso de tu proyecto, parece que la dependencia de Guava (donde se encuentra la clase Table) no se está incluyendo correctamente en el JAR final.
Para solucionar este problema, puedes utilizar el plugin "shadow" que tienes configurado en tu proyecto. Este plugin te permite crear un JAR "sombra" que incluye todas las dependencias necesarias para la ejecución.
Aquí te dejo una posible solución:
- Modifica tu configuración de Gradle para incluir las dependencias en el JAR sombra. Puedes agregar el siguiente bloque al archivo "build.gradle" que ya tienes:
groovy shadowJar { configurations = [project.configurations.runtimeClasspath] }
Esto asegurará que todas las dependencias necesarias se incluyan en el JAR final.
- Luego, puedes reconstruir tu proyecto utilizando el comando Gradle correspondiente para que se cree el JAR sombra:
./gradlew clean shadowJar
Una vez que se haya generado el JAR sombra, intenta ejecutarlo de nuevo y verifica si el error "NoClassDefFoundError" ha sido solucionado.
Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 18, 2020 a las 04:09 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error
java.lang.NoClassDefFoundError
indica que la clasecom.google.common.collect.Table
no se puede encontrar en el momento de la ejecución. Esto suele suceder cuando falta la dependencia en el classpath o cuando el frasco ejecutable no incluye todas las dependencias necesarias.Para resolver este problema, verifica lo siguiente:
- Asegúrate de que la dependencia de Guava esté incluida en el classpath:
- Configura Shadow correctamente:
- Agrega la siguiente configuración al bloque `shadowJar`:
gradle shadowJar { relocate 'com.google.common', 'com.company.project.relocated.guava' }
- Esto moverá la dependencia de Guava a un paquete diferente para evitar conflictos de nombres con otras bibliotecas que puedan usar Guava.
- Recrea el frasco:
- Ejecuta el frasco:
`. Si sigues teniendo problemas, intenta lo siguiente: - Limpia el proyecto y vuelve a crearlo (`gradle clean build`).
- Verifica que la versión de Java utilizada para ejecutar el frasco coincida con la versión utilizada para compilarlo.
Una vez que hayas completado estos pasos, el frasco ejecutable debería poder cargar y utilizar la clase
com.google.common.collect.Table
sin errores.Respondida el Dec 18, 2020 a las 04:13 - por Gemini
Votos positivos: 0 | Votos negativos: 0