
Ewoud
He instalado una aplicación, cuando intento ejecutarla (es un jar ejecutable) no pasa nada. Cuando lo ejecuto desde la línea de comandos con:
java -jar “aplicación.jar”
Recibo el siguiente mensaje:
sin atributo de manifiesto principal, en “app.jar”
Normalmente, si hubiera creado el programa yo mismo, habría agregado un atributo de clase principal al archivo de manifiesto. Pero en este caso, como el archivo es de una aplicación, no puedo hacer eso. También intenté extraer el jar para ver si podía encontrar la clase principal, pero hay muchas clases y ninguna de ellas tiene la palabra “principal” en su nombre. Debe haber una manera de solucionar esto porque el programa funciona bien en otros sistemas.
Eso debería haber sido java -jar app.jar
en lugar de java -jar "app"
.
los -jar
La opción solo funciona si el archivo JAR es un archivo JAR ejecutable, lo que significa que debe tener un archivo de manifiesto con un Main-Class
atributo en él. Ver Empaquetado de programas en archivos JAR para aprender a crear un JAR ejecutable.
Si no es un JAR ejecutable, deberá ejecutar el programa con algo como:
java -cp app.jar com.somepackage.SomeClass
donde com.somepackage.SomeClass
es la clase que contiene el main
método para ejecutar el programa. (Cuál es esa clase depende del programa, es imposible saberlo a partir de la información que ha proporcionado).

Sasanka Panguluri
Esto se debe a que Java no puede encontrar el atributo principal en el archivo MANIFEST.MF. El atributo Main es necesario para decirle a Java qué clase debe usar como punto de entrada de la aplicación. Dentro del archivo jar, el archivo MANIFEST.MF se encuentra en la carpeta META-INF. ¿Se pregunta cómo podría mirar lo que hay dentro de un archivo jar? Abra el archivo jar con WinRAR.
El atributo principal dentro de MANIFEST.MF se ve así:
Main-Class: <packagename>.<classname>
Obtiene este error “sin atributo de manifiesto principal” cuando falta esta línea en el archivo MANIFEST.MF.
Es realmente un gran lío especificar este atributo dentro del archivo MANIFEST.MF.
Actualización: acabo de encontrar una forma realmente ordenada de especificar el punto de entrada de la aplicación en eclipse. Cuando dice Exportar,
Select Jar and next
[ give it a name in the next window ] and next
and next again
and you'll see " Select the class of the application entry point".
Just pick a class and Eclipse will automatically build a cool MANIFEST.MF for you.


Naga Srinu Kapusetti
Tuve el mismo problema. al agregar las siguientes líneas al archivo pom lo hizo funcionar. El complemento se asegurará del proceso de compilación de su aplicación con todos los pasos necesarios.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

estrella de la mañana
Tuve este problema al crear un jar usando IntelliJ IDEA. Ver esta discusión.
Lo que me resolvió fue volver a crear el artefacto jar, eligiendo JAR > Desde módulos con dependencias, pero sin aceptar el directorio predeterminado para META-INF/MANIFEST.MF. Cámbielo de -/src/main/java a -/src/main/resources.
De lo contrario, estaba incluyendo un archivo de manifiesto en el contenedor, pero no el que debería tener en -/src/main/java.
Busque los métodos principales; no puedes confiar en los nombres de las clases.
– David Newton
13 de marzo de 2012 a las 18:22
Lo sé, pero como solo tengo archivos .class, realmente no puedo ver los métodos. ¿O puedo?
– Ewoud
13 de marzo de 2012 a las 18:42
Realmente no estás escribiendo las comillas, ¿verdad? En cualquier caso, hay varias formas de ver los métodos, incluido el uso de
javap
. Sin embargo, es posible que desee desarmarlo y ver si en realidad no hay un manifiesto.– David Newton
13 de marzo de 2012 a las 19:37
Relacionado: con dependencias: stackoverflow.com/a/23986765/360211
– Weston
13 de septiembre de 2015 a las 7:37
¿Qué pasa si no tengo la clase principal mientras ejecuto el código usando CommandLineJobRunner?
– Kamini
2 de junio de 2017 a las 14:01