No se puede ejecutar el archivo jar: "sin atributo de manifiesto principal"

He instalado una aplicación, cuando intento ejecutarla (es un jar ejecutable) no pasa nada. Cuando la ejecuto desde la línea de comandos con java -jar "app.jar&quot";

me sale el siguiente mensaje:

no hay atributo de manifiesto principal, en "app.jar";

Normalmente, si hubiera creado el programa yo mismo, habría añadido un atributo de clase principal al archivo de manifiesto. Pero en este caso, como el archivo es de una aplicación, no puedo hacerlo. También intenté extraer el jar para ver si podía encontrar la clase principal, pero hay demasiadas clases y ninguna de ellas tiene la palabra "main" en su nombre. Debe haber una manera de arreglar esto porque el programa funciona bien en otros sistemas.

En primer lugar, es un poco raro, ver que ejecutas java -jar "app" y no java -jar app.jar

Segundo, para hacer un jar ejecutable... necesitas hacer un archivo llamado META-INF/MANIFEST.MF

el archivo en sí debe tener (al menos) esta línea:

Main-Class: com.mypackage.MyClass

Donde com.mypackage.MyClass es la clase que contiene el punto de entrada public static void main(String[] args).

Tenga en cuenta que hay varias maneras de hacer esto, ya sea con la CLI, Maven, Ant o Gradle:

Para CLI, el siguiente comando servirá: (tks @[dvvrt][1])

jar cmvf META-INF/MANIFEST.MF .jar 

Para Maven, algo como el siguiente fragmento debería funcionar. Ten en cuenta que esto es sólo la definición del plugin, no el pom.xml completo:






      org.apache.maven.plugins
      maven-jar-plugin
      3.1.0
Comentarios (11)

Debería haber sido java -jar app.jar en lugar de java -jar "app".

La opción -jar sólo funciona si el archivo JAR es un archivo JAR ejecutable, lo que significa que debe tener un archivo de manifiesto con un atributo Main-Class en él. Vea Empaquetar programas en archivos JAR para aprender a crear un JAR ejecutable.

Si no es un JAR ejecutable, entonces tendrás que ejecutar el programa con algo como

java -cp app.jar com.somepackage.SomeClass

donde com.somepackage.SomeClass es la clase que contiene el método main para ejecutar el programa. (Lo que es esa clase depende del programa, es imposible saberlo por la información que has proporcionado).

Comentarios (10)

Si el jar no sigue las reglas, no es un jar ejecutable.

Comentarios (2)