¿Por qué se ejecuta un .jar
script cuando lo ejecuto como
java -jar myfile.jar
, pero no se ejecuta cuando lo ejecuto como?
./myfile.jar
Respuesta1
Cuando ejecuta su jar, java -jar myfile.jar
le está diciendo a su shell que ejecute el java
comando y le pasa algunos argumentos que java
lo entienden. Sin embargo, cuando lo ejecuta, ./myfile.jar
le pide al shell que determine el interruptor con el que ejecutarlo, lo cual no puede hacer.
El shell busca la línea shebang al principio del script para saber con qué aplicación ejecutar el script, por lo que verá scripts de shell que comienzan con:
#!/bin/bash
O los scripts de Python comienzan con
#!/usr/bin/python
Lo que le estás diciendo al shell, básicamente, es que ejecute el script usando la aplicación que encuentras en /bin/bash
o /usr/bin/python
. En el caso de su archivo jar, el shell no puede encontrar el shebang, por lo que no sabe cómo ejecutar el código.
En el pasado, he usado scripts contenedores para ejecutar aplicaciones Java, por lo que es algo similar a:
#!/bin/bash
java -jar /path/to/myfile.jar
Luego solo necesita hacerlo ejecutable, usando chmod
y puede ejecutarlo como lo haría con cualquier otro script de Shell.
Respuesta2
Había instalado jdk usando sudo apt-get install openjdk-7-jdk y jre usando sudo apt-get install openjdk-7-jre pero aún tenía este problema. Pensé que esto podría deberse a que mi sistema no pudo encontrar la ruta de Java. Finalmente, cuando instalé el instalador de Oracle jdk7 usando los siguientes comandos, pude ejecutar el archivo .jar usando el comando ./myfile.jar. Utilicé los siguientes comandos para instalarlo:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-obtener actualización
sudo apt-get install oracle-jdk7-installer