Por que um .jar
script é executado quando eu o executo
java -jar myfile.jar
, mas não é executado quando eu o executo como
./myfile.jar
Responder1
Quando você executa seu jar usando java -jar myfile.jar
você está dizendo ao seu shell para executar o java
comando e passando alguns argumentos que java
entendem. No entanto, quando você o executa, ./myfile.jar
você está solicitando ao shell que determine o interruptor para executá-lo, o que ele não consegue fazer.
O shell procura a linha shebang no início do script para saber com qual aplicativo executar o script, e é por isso que você verá scripts de shell começando com:
#!/bin/bash
Ou os scripts python começam com
#!/usr/bin/python
O que você está dizendo ao shell, basicamente, é executar o script usando o aplicativo que você encontra em /bin/bash
ou /usr/bin/python
. No caso do seu arquivo jar, o shell não consegue encontrar o shebang, portanto não sabe como executar o código.
No passado, usei scripts wrapper para executar aplicativos Java, algo semelhante a:
#!/bin/bash
java -jar /path/to/myfile.jar
Então você só precisa tornar esse executável, usando chmod
e você pode executá-lo como faria com qualquer outro script de shell.
Responder2
Eu instalei o jdk usando sudo apt-get install openjdk-7-jdk e jre usando sudo apt-get install openjdk-7-jre mas ainda estava enfrentando esse problema. Achei que isso poderia ser devido ao motivo pelo qual meu sistema não conseguiu encontrar o caminho do Java. Finalmente, quando instalei o instalador Oracle jdk7 usando os comandos a seguir, consegui executar o arquivo .jar usando o comando ./myfile.jar. Usei os seguintes comandos para instalá-lo:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get atualização
sudo apt-get install oracle-jdk7-installer