java - ClassNotFoundException para la dependencia incluida
spring boot glassfish 5 (1)
Estoy usando maven para incluir el módulo google gdata en mi proyecto y todo compila bien, pero obtengo esta excepción en tiempo de ejecución:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gdata/util/ServiceException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
at java.lang.Class.getMethod0(Class.java:2813)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: com.google.gdata.util.ServiceException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more
Estoy incluyendo el módulo en mi pom así ...
...
<dependencies>
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>core</artifactId>
<version>1.47.1</version>
</dependency>
</dependencies>
...
E incluir en mi clase como tal ...
...
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.docs.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.ListFeed;
import com.google.gdata.util.ServiceException;
...
Cuando abro las dependencias y me meto en las jarras, veo la clase ServiceException ... ¿y qué da? Traté de descargar las fuentes solo por diversión, pero no ayudé con nada.
Estoy seguro de que es algo tonto que estoy haciendo mal ...
--- Actualización ---
Revisé las dependencias duplicadas, como se sugirió en los comentarios. Después de encontrar que una de las dependencias se incluía con diferentes versiones, actualicé el archivo pom:
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>core</artifactId>
<version>1.47.1</version>
<type>jar</type>
<exclusions>
<exclusion>
<artifactId>jsr305</artifactId>
<groupId>com.google.code.findbugs</groupId>
</exclusion>
</exclusions>
</dependency>
Todavía hay una discrepancia de versiones para la guayaba, pero incluso excluir la guayaba por completo no rompe la compilación (y el árbol de dependencias solo lo marca como una advertencia) y sigo teniendo el mismo error, así que no creo que ese sea el problema. La clase está en ese módulo core gdata de todos modos ...
Literalmente, la única otra clase que tengo en mi proyecto es una clase de enum bastante escasa, y he enumerado todas las clases no centrales Java que incluyo.
He limpiado, eliminado .m2 construido, reconstruido, mismo problema.
Obviamente, la clase com.google.gdata.util.ServiceException
no se puede encontrar en su classpath.
- Intente volver a extraer las dependencias desde la línea de comandos y desde la carpeta del proyecto:
dependency:copy-dependencies
- Intente sincronizar su eclipse IDE al actualizar el proyecto, y / o mediante el plugin m2e eclipse por dependencias de actualización.
- En la línea de comandos y desde la carpeta del proyecto, intenta compilar de nuevo usando:
mvn clean compile
- Si eso no funciona, busque la clase no encontrada bajo las dependencias de Maven en su proyecto, (debería poder encontrar)
- Asegúrese de que sus dependencias Maven sean parte de su configuración de compilación. Intenta compilar de nuevo:
mvn clean compile
Si tiene la dependencia solicitada en su Repositorio de Local Maven, y está incluida en su proyecto, y su configuración de compilación incluye las dependencias de Maven que se incluirán en su carpeta de salida classpath. Entonces debería funcionar.