Warum wird ein .jar
Skript ausgeführt, wenn ich es wie ausführe
java -jar myfile.jar
, aber nicht, wenn ich es wie ausführe
./myfile.jar
Antwort1
Wenn Sie Ihr JAR mit ausführen, java -jar myfile.jar
sagen Sie Ihrer Shell, dass sie den java
Befehl ausführen soll, und übergeben ihr einige Argumente, die java
sie versteht. Wenn Sie es jedoch mit ausführen, ./myfile.jar
bitten Sie die Shell, den Interrupter zu bestimmen, mit dem es ausgeführt werden soll, was sie nicht tun kann.
Die Shell sucht am Anfang des Skripts nach der Shebang-Zeile, um zu wissen, mit welcher Anwendung das Skript ausgeführt werden soll. Daher sehen Sie Shell-Skripts, die wie folgt beginnen:
#!/bin/bash
Oder Python-Skripte beginnen mit
#!/usr/bin/python
Im Grunde sagen Sie der Shell, dass sie das Skript mit der Anwendung ausführen soll, die Sie unter /bin/bash
oder finden /usr/bin/python
. Im Fall Ihrer JAR-Datei kann die Shell das Shebang nicht finden und weiß daher nicht, wie sie den Code ausführen soll.
In der Vergangenheit habe ich Wrapper-Skripte zum Ausführen von Java-Anwendungen verwendet, also etwas Ähnliches wie:
#!/bin/bash
java -jar /path/to/myfile.jar
Dann müssen Sie die Datei nur noch ausführbar machen chmod
und können sie wie jedes andere Shell-Skript ausführen.
Antwort2
Ich habe JDK mit sudo apt-get install openjdk-7-jdk und JRE mit sudo apt-get install openjdk-7-jre installiert, aber ich hatte immer noch dieses Problem. Ich dachte, das könnte daran liegen, dass mein System den Java-Pfad nicht finden konnte. Als ich schließlich das Oracle JDK7-Installationsprogramm mit den folgenden Befehlen installierte, konnte ich die JAR-Datei mit dem Befehl ./myfile.jar ausführen. Ich habe die folgenden Befehle zur Installation verwendet:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get installiere Oracle-JDK7-Installer