Quando você executa seu jar usando java -jar myfile.jar
, está dizendo ao shell para executar o comando java
e passar alguns argumentos que java
entende. No entanto, quando você está usando o ./myfile.jar
, você está pedindo ao shell para determinar com qual interruptor o executará, o que não é possível.
O shell procura a linha shebang no começo 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 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, por isso não sabe como executar o código.
No passado, usei scripts de wrapper para executar aplicativos Java, algo semelhante a:
#!/bin/bash
java -jar /path/to/myfile.jar
Então você só precisa fazer esse executável, usando chmod
e você pode executá-lo como faria com qualquer outro script de shell.