Convertir un .jar en exécutable Linux (wrapper)
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 :
- 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/),
- Configurer le script et le rendre exécutable,
- 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