Skip to content

Instantly share code, notes, and snippets.

@abranhe
Last active May 14, 2020 06:01
Show Gist options
  • Save abranhe/19367d189111beb7f14f84c2ce5f7b60 to your computer and use it in GitHub Desktop.
Save abranhe/19367d189111beb7f14f84c2ce5f7b60 to your computer and use it in GitHub Desktop.
Java Executables

Convert Java Executable to Linux Executable

Introduction

Java program is universal and applicable to most operating systems, but if someone intends to create a native executable binary file for certain operation system, is that possible?

The answer is yes. Here is the instruction to create an executable program for Linux with .run as its extension name.

Create a text file use your favorite text editor (In this case it is gedit) and type these code below:

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
    java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1

save as runner.sh

Pack your project into a runnable *.jar and export the *.jar file in the same directory of runner.sh.

$ java -jar PROJECT.jar

There are plenty of tutorials showing how to implement this feature using Ant, Maven, Eclipse, Netbens, etc.

Anyway in its basic form, it just requires to add a manifest.mf file to the jar package. The manifest must contain an entry Main-Class that specifies which is the class defining the main method for your application. For example:

$ javac HelloWorld.java
$ echo Main-Class: HelloWorld > manifest.mf
$ jar -cvmf manifest.mf helloworld.jar HelloWorld.class

Run the command below, make sure the current directory is the same one includes runner.sh and the *.jar file.

cat runer.sh PROJECT.jar > PROJECT.run && chmod +x PROJECT.run

where PROJECT is the name of your *.jar file.

That's all! after this you will have a file named PROJECT.run and you could run it via:

./PROJECT.run

or just

sh PROJECT.run

Furthermore, all arguments are supported as the original Java executable file.

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment