¿Por qué no ha podido cargar el atributo de manifiesto de clase principal desde un archivo JAR?

85

He creado un archivo JAR de esta manera jar cf jar-file input-files. Ahora, estoy intentando ejecutarlo. Ejecutarlo no funciona (no se encuentra el comando jre):

jre -cp app.jar MainClass

Esto tampoco funciona:

java -jar main.jar

(No se pudo cargar el atributo de manifiesto Main-Class desde main.jar).

También descubrí que

Para ejecutar una aplicación empaquetada como un archivo JAR (versión 1.2 - requiere el encabezado del manifiesto Main-Class)

¿Qué es el "encabezado del manifiesto de clase principal"? ¿Cómo lo creo y dónde lo pongo?

romano
fuente

Respuestas:

62

No estoy seguro de creer en sus síntomas:

  • Si jreno se encuentra el comando, la ejecución jre -cp app.jardebería dar el mismo error
  • El simple hecho de agregar un archivo JAR a la ruta de clase no debería dar el error que está viendo

Espero que vea este error si ejecuta:

java -jar app.jar

El encabezado Main-Class debe estar en el manifiesto del archivo JAR; se trata de metadatos sobre cosas como otras bibliotecas requeridas. Consulte la documentación de Sun para saber cómo crear un manifiesto apropiado. Básicamente, necesita crear un archivo de texto que incluya una línea como esta:

Main-Class: MainClass

Entonces corre

jar cfm app.jar manifest.txt *.class
Jon Skeet
fuente
Gracias. Funciona. Creé un archivo de manifiesto con el Main-Class: MainClassy luego creé el archivo .jar con el comando que diste. Después de eso, pude ejecutar mi programa java -jar main.jar.
Roman
1
Otra opción es usar la opción -e, sin necesidad de un archivo separado. jar cfe app.jar MainClass *.classNota: -e se agregó en JDK 6.
pferate
35
  1. establecer la ruta de clase y compilar

    javac -classpath "C: \ Archivos de programa \ Java \ jdk1.6.0_ updateVersion \ tools.jar" yourApp.java

  2. crear manifest.txt

    Clase principal: nueva línea de yourApp

  3. crea yourApp.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. ejecutar yourApp.jar

    java -jar yourApp.jar

weirdFactory
fuente
9

Puedes correr con:

java -cp .;app.jar package.MainClass

Me funciona si no hay un manifiesto en el archivo JAR.

Dainius
fuente
Tengo: Opción no reconocida: -cp. ¿Podrías revisar tu respuesta? Porque no sé lo que intenta hacer este comando. (java -cp.; paquete app.jar.MainClass). ¿Este es un comando o dos?
Kenorb
1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… "-cp.; app.jar" debe agregar su archivo app.jar a la ruta de clase, entonces puede ejecutar el método MainClass.main () ( MainClass está en el paquete "paquete").
Dainius
1
Entonces, probablemente en Linux esta opción (-cp) no existe (la mía es java v1.6.0_24, OpenJDK Runtime Environment (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)).
kenorb
java -version => Java HotSpot (TM) 64-Bit Server VM (compilación 20.1-b02, modo mixto) "java -cp. test1.Main" funciona
Dainius
/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => VM de servidor OpenJDK de 64 bits (compilación 20.0-b12, modo mixto) "/ usr / lib / jvm / java-6-openjdk -amd64 / bin / java -cp. test1.Main "funciona
Dainius
6

Recibí este error y fue porque tenía los argumentos en el orden incorrecto:

CORRECTO

java maui.main.Examples tagging -jar maui-1.0.jar 

INCORRECTO

java -jar maui-1.0.jar maui.main.Examples tagging 
Sridhar Sarnobat
fuente
1
Esto puede ser solo un problema de bsd, estoy bastante seguro de que lo hice de otra manera recientemente.
Sridhar Sarnobat
1

La forma más sencilla de estar seguro de que ha creado correctamente el archivo JAR ejecutable, con el archivo de manifiesto adecuado, es utilizar Eclipse para compilarlo. En su proyecto de Eclipse, básicamente solo selecciona Archivo / Exportar en el menú y sigue las instrucciones.

De esa manera, puede estar seguro de que su archivo JAR es correcto y sabrá buscar en otra parte si todavía hay un problema. El proceso se describe en su totalidad en Preguntas frecuentes. ¿Cómo puedo crear un archivo JAR ejecutable para un programa SWT independiente? .

Greg Burdett
fuente
Gracias por ExportEclipse IDE.
Ninh Pham
1

Tratar

java -cp .:mail-1.4.1.jar JavaxMailHTML 

no es necesario tener manifestarchivo.

user4581964
fuente
0

Descubrí que también estaba teniendo este error en NetBeans. Espero que lo siguiente sea de ayuda.

  1. Asegúrese de que cuando vaya a Configuración del proyecto establezca la clase principal que desea ejecutar.
  2. Hacer una construcción o una construcción limpia
  3. Coloque el archivo jar donde desee e intente: java -jar "YourProject.jar" nuevamente en la línea de comandos.

Este era el problema que estaba obteniendo porque tenía otros programas de "prueba" que estaba usando en NetBeans y tenía que asegurarme de que la Clase Principal en la parte Ejecutar de la configuración del Proyecto estuviera configurada correctamente.

muchas bendiciones, John P

john p
fuente
0

Recibí el mismo error cuando ejecuté:
jar cvfm test.jar Test.class Manifest.txt

Lo que resolvió fue esto:
jar cvfm test.jar Manifest.txt Test.class

Mi manifiesto tiene el punto de entrada como se indica en los documentos de Oracle (asegúrese de que haya un carácter de nueva línea al final del archivo):
Main-Class: Test

Niño obvio
fuente
0

Me enfrenté al mismo problema. Este comando de Unix no puede encontrar la clase principal. Esto se debe a que las versiones de JDK en tiempo de ejecución y en tiempo de compilación son diferentes. Haga que el archivo jar a través de eclipse después de cambiar la versión del compilador de Java. El siguiente enlace me ayudó.

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

Intente ejecutar el jar creado después de este paso y luego ejecútelo

Harshita Sethi
fuente
0

Si su ruta de clases está completamente especificada en el manifiesto, tal vez necesite la última versión del entorno de ejecución de Java. Mi problema se solucionó cuando reinstalé el jre 8.

AmirHossein Rezaei
fuente
0

Si usa eclipse, intente a continuación: 1. Haga clic derecho en el proyecto -> seleccione Exportar 2. Seleccione el archivo Jar ejecutable en el seleccione un destino de exportación 3. Ingrese el nombre de jar y seleccione "Paquete requerido ..." (segundo botón de radio) -> Finalizar

Espero que esto ayude...!

Barani r
fuente