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 :

  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

Copyright © 2013-2022 blog.jeanphi.net / All rights reserved / Design by Jean-Philippe.C