es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

java -jar Error: no se pudo encontrar o cargar la clase principal src.Main

He visto muchas preguntas similares, pero he decidido publicar la mía porque los usuarios que habían publicado otras preguntas no estaban en mis mismas condiciones exactas. Estoy tratando de aprender más sobre la línea de comandos de Java y ahora mismo estoy intentando ejecutar un programa simple contenido en un JAR creado por mí. El código fuente está compuesto por un único archivo llamado Main.java.

Estructura del directorio raíz:

  • src
    — Main.java
  • META-INF
    — MANIFEST.mf

Contenido de Main.java:

package src;

public class Main {
public static void main(String[] args) {
System.out.println(“Hola Mundo!”);
}
}

Contenido de MANIFEST.mf:

Manifest-Version: 1.0
Main-Class: src.Main

He compilado la clase Main y la he almacenado en un directorio llamado “classes”. Estructura de directorios actualizada:

  • classes
    — src
    —— Main.class
  • src
    — Main.java
  • META-INF
    — MANIFEST.mf

Luego creé un archivo JAR llamado “myJarFile.jar” en la carpeta raíz y la estructura del directorio dentro del archivo JAR es la siguiente:

  • classes
    — src
    —— Main.class
  • META-INF
    — MANIFEST.mf

Donde el contenido de MANIFEST.mf es el que se proporcionó anteriormente. Ahora, desde la carpeta raíz, intenté ejecutar el comando “java -jar myJarFile.jar”, pero obtuve el error:

Error: No se pudo encontrar ni cargar la clase principal “src.Main”
Causado por: java.lang.ClassNotFoundException: src.Main

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el comando java -jar myJarFile.jar es que no se encuentra la clase Main dentro del archivo JAR. Para solucionar esto, necesitamos actualizar el atributo Main-Class en el archivo MANIFEST.mf para incluir el nombre completo del paquete de la clase Main.

    El contenido actualizado de MANIFEST.mf debería ser:

    Manifest-Version: 1.0
    Main-Class: src.Main

    Para incluir el nombre completo del paquete de la clase Main, necesitamos reemplazar src.Main con src/Main:

    Manifest-Version: 1.0
    Main-Class: src/Main

    Después de actualizar el archivo MANIFEST.mf, necesitamos recrear el archivo JAR incluyendo el archivo MANIFEST.mf actualizado usando el siguiente comando:

    jar cfm myJarFile.jar META-INF/MANIFEST.mf -C classes .

    Luego, podemos ejecutar el archivo JAR usando el comando java -jar myJarFile.jar y la salida será ¡Hola Mundo!.

Comments are closed.