How can I execute a .jar file from the terminal
I know that to execute a file, I use the .
command, then the file name with a space between them. But I'm trying to execute a .jar file using the .
and it does not work. I went into the properties and marked it as executable and made it run with Java.
Is there a way to execute a file with Java in the Bash Terminal?
I am trying to execute the Minecraft.jar file.
Solution 1:
The .
syntax can only be used to run (by "sourcing") shell scripts.
You'll need to use the java
command to run a .jar
file:
java -jar Minecraft.jar
If you don't have java installed, you can fix that by installing the default-jre
¹ package. You can see if you already have java installed by running in a terminal:
java -version
[1]: This will install the default openjdk Java runtime. You can use openjdk-8-jre
, or openjdk-7-jre
, or openjdk-6-jre
instead, if you prefer - whichever is available on your version of Ubuntu.
Solution 2:
Linux is perfectly capable of running a foreign binary, like a JAR file. This is how Wine works, for example. To run JAR files as executable do the following in a console
sudo apt-get install binfmt-support
Cd to your JAR file and change it to executable (you can also do this through file properties in Nautilus)
chmod a+rx myjar.jar
Run your jar file just as if it was any other binary executable or shell script
./myjar.jar
Note: Be sure you have binfmt_misc linux kernel module loaded. If you use your custom compiled kernel without this module, binfmt-support won't work.
Solution 3:
If it is an executable jar, then
java -jar Minecraft.jar
Not all jar-Archives contain an executable class, declared to be started in the Manifest file, but if there is, this will work.
Btw.: You don't start most programs from the shell with the dot. The dot is a shortcut for source
, and it only works in the bash and some other shells, to include a script in the scope of the current session.
A compiled binary xybin is simply started with its name if it is in the path:
xybin
or, with its absolute path:
/home/foo/proj/test/xybin
or with its relative path:
proj/test/xybin
or if you happen to be in the directory of the file, with this relative path:
./xybin
The file has to be marked executable for you (see: chmod). All of the above is true for shellscripts too, but they often have an extension .sh, and you can start a shellscript by invoking the interpreter, and then it needn't be marked executable:
bash xy.sh
If you don't want to start a new bash, you can use source, and you do so, to consume function definitions, aliases and variable settings.