java.lang.ClassNotFoundException cuando se ejecuta en IntelliJ IDEA
Estoy creando un programa para trabajar con bases de datos y aparece el siguiente error al compilar en IntelliJ IDEA. ¿Alguien sabe por qué sucede esto y cómo podría solucionarlo?
El error que obtiene no ocurre durante la compilación, sino cuando intenta ejecutar su aplicación. Sucede porque Java no pudo encontrar Table.class
el archivo dentro db
del subdirectorio del directorio de salida del proyecto (classpath).
Puede suceder por múltiples razones:
- clase principal incorrecta seleccionada en la configuración de ejecución/depuración
Table.java
está excluido de la compilación (por accidente o intencionalmente porque contenía errores y deseaba omitirlo mientras trabajaba en otro código)- clase no compilada porque el paso de compilación está excluido de los pasos anteriores al lanzamiento en la configuración de ejecución/depuración
- El proyecto está mal configurado y no hay una raíz de origen definida para el directorio que contiene
db
el subdirectorio. Table.java
tienepackage
una declaración incorrecta o está ubicado/movido a un paquete diferente- La ruta del proyecto contiene dos puntos
:
en Mac/Linux o punto y coma;
en Windows, se usa para separar la ruta de clase y la invalidará. Ver este tema para más detalles. Tenga en cuenta que Finder en Mac puede mostrar dos puntos en la ruta como barras. - Es posible que el jar no se ejecute si uno de los jar dependientes está firmado digitalmente, ya que el nuevo artefacto incluirá la firma parcial de la dependencia. Consulte esta respuesta para obtener más detalles.
- En la estructura del proyecto, asegúrese de tener la versión de Java correcta para compilar.
- Hay un error conocido que indica que a veces un proyecto Java creado a partir de la plantilla de línea de comandos no funciona porque
.idea/modules.xml
el archivo hace referencia a un archivo de módulo no válido llamadountitled104.iml
. Corrija el nombre del módulo manualmente o cree un proyecto desde cero y no use una plantilla. - en Windows "Beta: utilice Unicode UTF-8 para compatibilidad con idiomas en todo el mundo" La configuración regional está habilitada. Consulte IDEA-247837 para obtener más detalles y soluciones.
- Cuando IntelliJ IDEA se configura para almacenar dependencias de módulos en formato Eclipse, la configuración raíz de origen se pierde debido a un error conocido . Configure el módulo para utilizar las dependencias del formato IntelliJ IDEA como solución alternativa.
En un proyecto configurado correctamente y con la configuración de ejecución/depuración correcta, todo funciona bien:
- Es posible que el jar no se ejecute si uno de los jar dependientes está firmado digitalmente, ya que el nuevo artefacto incluirá la firma parcial de la dependencia. Consulte esta respuesta para obtener más detalles.
Debo enfatizar nuevamente el punto que CrazyCoder tiene aquí.
La JVM (Oracle) solía generar una excepción de seguridad cuando intentaba ejecutar un archivo Jar que contenía firmas rotas. Esto tenía sentido desde el punto de vista de "¿Qué pasa?".
Ese ya no es el caso. De hecho, ahora están lanzando ClassNotFoundException s, incluso si la clase está allí mismo en el archivo (no importa si está en el paquete predeterminado/nivel superior o en una estructura de paquete anidada).