El archivo JAR no se ejecutará, sino que regresará

Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)

Intenté eliminar el archivo de clase y luego volver a crear el archivo JAR. Intenté eliminar y volver a crear el programa desde cero. Intenté crear el archivo JAR sin un manifiesto.

package ExampleProject;

public class ExampleProgram {

    public static void main(String[] args) {

        System.out.println("Hello, World!");

    }

}

Este es el proceso exacto en el que intenté crear el archivo JAR en la línea de comandos.

Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java
Josephs-MBP:program jepappano4$ java ExampleProgram
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java manifest.mf
Josephs-MBP:program jepappano4$ jar -cvfm myprogram.jar manifest.mf *.class
added manifest
adding: ExampleProgram.class(in = 450) (out= 301)(deflated 33%)
Josephs-MBP:program jepappano4$ java -jar myprogram.jar
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)

Estoy siguiendo un tutorial sobre la creación de archivos JAR y esperaba que este proceso funcionara, pero no es así. ¿Qué estoy haciendo incorrecto aquí?

No estoy seguro de si esto es importante o no, sin embargo, estoy usando Java 11.

0
Joe P 20 oct. 2019 a las 04:18

1 respuesta

La mejor respuesta

El error de 'nombre incorrecto' es el error clave aquí. Esto es lo que significa:

En java, el nombre completo de una clase es su paquete, seguido de un punto, seguido del nombre de la clase. Entonces, su nombre completo para esta clase es ExampleProject.ExampleProgram.

Para iniciarlos, debes poner este nombre completo en tu manifiesto: Debe tener una entrada que se parezca a:

Main-Class: ExampleProject.ExampleProgram

Además, la estructura de la carpeta debe coincidir con los puntos. Entonces, el archivo jar (que en realidad es solo un archivo zip) debe contener dentro de él, en el nivel raíz, un directorio llamado ExampleProject y este directorio necesita un archivo llamado ExampleProgram.class.

Se equivocó en uno o ambos, lo que provocó este error. Puede verificar la estructura de su archivo jar de la siguiente manera:

jar tvf myjar.jar

Debería ver una lista de:

ExampleProject/ExampleProgram.class

En ese lugar preciso.

0
rzwitserloot 20 oct. 2019 a las 02:33