Identification

Convertir un .jar en exécutable Linux (wrapper)

Catégorie : Développement Java

Cette recette propose une solution pour lancer une application Java (.jar) de la même manière que que n'importe quelle autre application sous Linux.

Bash à la rescousse

Le principe de la solution consiste à créer une interface permettant de transformer la commande standard : $ ./monprogramme, en son équivalent Java : $ java -jar monprogramme.jar. De cette manière l'appel à un programme Java devient complètement transparent.

Pour réaliser cette opération le plus simple et d'utiliser un script bash ; voici celui que je propose et que vous pouvez améliorer comme vous le souhaitez :

#!/bin/bash
#--------------------------------------------------------------------
# Lanceur d'applications Java
#--------------------------------------------------------------------

# Nom du fichier jar executable à lancer
jarFileToLaunch="monapplication.jar"

# Version minimum de Java
minJavaVersion="1.6.0"

# Paramètres Java additionnels
extraJavaArgs=""

#--------------------------------------------------------------------

# Le fichier jar existe ?
thisDir="$(dirname "$(readlink -f "$0")")"
jarFile="$thisDir/$jarFileToLaunch"
if [ ! -f $jarFile ]; then
        echo "Error: Invalid or corrupt jarfile $jarFile"
        exit 1
fi

# Java existe dans le $PATH ?
command -v java >/dev/null
if [ $? -eq 1 ]; then
    echo "Error: Java not found in \$PATH"
    exit 1
fi

# La version de Java est correcte ?
javaVersion=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ "$javaVersion" < "$minJavaVersion" ]]; then
    echo "Error: Requires a Java version greater than or equal to $minJavaVersion"
    exit 1
fi

# Reconstruction de la ligne de commande (préserve les '"')
strArgs=''
spaces="[[:space:]]"
for i in "$@"
do
    if [[ $i =~ $spaces ]]; then
        strArgs="$strArgs \"$i\""
        continue
    fi
    strArgs="$strArgs ${i}"
done

# Lancement de l'application
bash -c "java $extraJavaArgs -jar $jarFile $strArgs"
exit $?

Le script s'assure que Java est présent sur le système hôte et que sa version correspond à celle attendue par l'application. Il reformate ensuite les arguments qui lui ont éventuellement été passés et lance l'application java.

Paramètres

jarFileToLaunch
Nom du fichier Jar executable à lancer. Exemple : "monapplication.jar"
minJavaVersion
Version minimum de Java nécessaire à l'application (paramètre obligatoire). Exemple : "1.6.0"
extraJavaArgs
Arguments supplémentaires à passer à Java lors de l'exécution de l'application (paramètre optionnel). Exemple : "-showversion"

Déploiement

Le déploiement du script s'effectue en trois étapes :

  1. Déposer une copie du script dans le répertoire où se situe l'application Java qu'il doit lancer (typiquement : /usr/local/bin/monapplication/),
  2. Configurer le script et le rendre exécutable,
  3. Créer un lien symbolique dans /usr/local/bin/ pointant vers le script de lancement,

Une fois ces opérations effectuées vous devriez obtenir une structure de répertoire comme suit :

/usr/local/bin/
  |- monapplication/
  |   |- launcher.sh
  |   |- monapplication.jar
  |- monapplication -> /usr/local/bin/monapplication/launcher.sh

Utilisation

Le lancement de votre application peut maintenant s'effectuer de la même manière que les applications natives :

$ ./monapplication