Comment travailler avec les variables d'environnement dans une application Java ?

vendredi 19 octobre 2001

Les variables d’environnement sont des chaînes des texte donnant des informations utiles à l’exécution d’un programme Java.
Il faut faire attention car certaines variables d’environnement ne sont pas portables: par exemple les systèmes Applet/Mac n’ont pas de varibales d’environnement, et les systèmes DOS (Windows) utilisent un système de variables d’environnement différent de celui utilisé sur les systèmes UNIX.

Nous allons distinguer dans cet article 3 types de variables différents: celles que l’on peut spécifier à l’exécution d’un programme Java, en ajoutant des options à la commende "java maClasse" (portables sur tous les systèmes d’exploitation); celles que l’on peut définir avant l’exécution d’un programme, une bonne fois pour toutes, comme le célébrissime CLASSPATH (ce sont ces variables d’enviromment qui posent problème selon l’OS sous lequel est exécuté notre application Java); et, pour finir, les variables système, définies par la spécification Java, non modifiables, qui renseignent sur la JVM utilisée, et qui sont indépendantes de l’OS sous lequel tourne notre programme.

1) Premier type

Lors du travail avec les Properties, java.util.Properties, on utilise un fichier de propriétés. On peut par exemple créer 3 fichiers de propriétés qui renfermeront les valeurs en chaînes dures des textes d’une interface graphique.
On aura donc par exemple:

# Premier fichier: pour une enterface en français
# Ce fichier s’appelle francais.properties
monBouton1 = "OK"
monBouton2 = "Annuler"
# Second fichier: pour la même application, avec l’interface traduite en anglais
# Ce fichier s’appelle anglais.properties
monBouton1 = "OK"
monBouton2 = "Cancel"
# Troisième fichier: pour la même application, avec l’interface traduite en martien (langue des petits hommes verts)
# Ce fichier s’appelle martien.properties
monBouton1 = "GlupGlup"
monBouton2 = "Gniorf"

On a ainsi 3 fichiers qui contiennent le label de tous les éléments de notre interface graphique. On va lancer notre programme en lui indiquant que l’on veut utiliser l’un ou l’autre des fichiers… selon si notre utilisateur est français, américian, ou martien !

java -Dlangue=martien.properties MaClasse

On utilise une variable que l’on appelle "langue" dans laquelle sera stockée le nom du fichier de propriétés à charger.
Il ne nous reste plus qu’à charger ce fichier dans notre programme Java.

String env = System.getProperty("langue");

Alors, quelle langue parlera notre application ? Vous dites le martien ? C’est ça !
Notre variable "langue" contient le nom du fichier de propriétés à charger, nous allons donc le charger:

Properties envVars = new Properties();
envVars.load(env);

NOTE: on a travaillé avec les propriétés, ce qui a un peu compliqué les choses, mais c’était pour donner un exemple pratique, on aurait aussi bien pu, par exemple, indiquer une image à charger:

java -Dimage=monLogo.gif MaClasse
ImageIcon img = new ImageIcon(System.getProperty("image"));

Il est très important dans tous les cas de ne pas laisser d’espace entre le -D et le nom de la variable et des deu côtés du =.

2) Second type

Si vous avec compris le premier type, vous avec compris le second, car c’est une variation du premier…

On définit une variable, par exemple:

# Sous DOS (Windows), on ajoute cette ligne à l’autoexec.bat
MON_CHEMIN_PERSO="C:\Mes Documents\Mes Images\"
# Sous UNIX
export MON_CHEMIN_PERSO=/home/moi/mes_images/:$MON_CHEMIN_PERSO

Et au lancement de notre programme Java, on écrira:

# Windows
java MaClasse %MON_CHEMIN_PERSO%
# UNIX
java MaClasse $MON_CHEMIN_PESO

La procédure pour récupérer la variable dans le programme, on la lit dans la méthode main() comme argument[0].
Personnellement je n’aime pas cette methode, mais elle existe…

3) Troisième type

Comme expliqué plus haut, le troisième type est totalement différent: vous ne pouvez pas modifier les variables d’environnement ce de type, elles sont internes au langage Java et servent à fournir des informations sur la JVM hôte.

La syntaxe pour récupérer ce genre de propriétés est la suivante:

String propriete = java.lang.System.getProperty(String prop);
Exemple:
final String USER_HOME = System.getProperty("user.home");

Voici un tableau des différentes propriétés auxquelles l’on peut avoir accès:
Sur fond bleu clair les plus utilisées.


Valeur


Signification

java.version
Version du
JRE
java.vendor
"Vendor" du JRE
java.vendor.url
URL du "Vendor"
java.vm.specification.version
JVM version de specification
java.vm.specification.vendor
JVM "vendor" de specification
java.vm.specification.name
JVM nom de specification
java.vm.version
JVM version d'implémentation
java.vm.vendor
JVM "vendor" d'implémentation
java.vm.name
JVM nom d'implémentation
java.home
Répertoire
de java.exe
java.specification.version
JRE version de specification
java.specification.vendor
JRE "vendor" de specification
java.specification.name
JRE nom de specification
java.class.version
Numéro
de version de Java
java.class.path
Le CLASSPATH
java.ext.dirs
Répertoire
des extensions
os.name
Nom du système
d'exploitation
os.arch
Nom de l'architechture de l'OS
os.version
Numéro de version de
l'OS
file.separator
Sérarateur
de fichiers (1)
line.separator
Séparateur
de lignes (2)
path.separator
Séparateur de chemins
(3)
user.name
Nom du compte utilisateur
user.home
Répertoire
par défaut de l'utilisateur
user.dir
Répertoire
où se trouve la classe principale
(1)
"/" sous UNIX
"\" sous Windows</p>

(2)
"\n" sous UNIX
"\r" sous Mac
"\n\r" sous Windows

(3)
":" sous Unix </td> </tr> </tbody> </table>

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité sur Valhalla GFBLOG.
Ecrit à Montpellier le 19 octobre 2001.

Les variables d’environnement sont des chaînes des texte donnant des informations utiles à l’exécution d’un programme Java.
Il faut faire attention car certaines variables d’environnement ne sont pas portables: par exemple les systèmes Applet/Mac n’ont pas de varibales d’environnement, et les systèmes DOS (Windows) utilisent un système de variables d’environnement différent de celui utilisé sur les systèmes UNIX.

Nous allons distinguer dans cet article 3 types de variables différents: celles que l’on peut spécifier à l’exécution d’un programme Java, en ajoutant des options à la commende "java maClasse" (portables sur tous les systèmes d’exploitation); celles que l’on peut définir avant l’exécution d’un programme, une bonne fois pour toutes, comme le célébrissime CLASSPATH (ce sont ces variables d’enviromment qui posent problème selon l’OS sous lequel est exécuté notre application Java); et, pour finir, les variables système, définies par la spécification Java, non modifiables, qui renseignent sur la JVM utilisée, et qui sont indépendantes de l’OS sous lequel tourne notre programme.

1) Premier type

Lors du travail avec les Properties, java.util.Properties, on utilise un fichier de propriétés. On peut par exemple créer 3 fichiers de propriétés qui renfermeront les valeurs en chaînes dures des textes d’une interface graphique.
On aura donc par exemple:

# Premier fichier: pour une enterface en français
# Ce fichier s’appelle francais.properties
monBouton1 = "OK"
monBouton2 = "Annuler"
# Second fichier: pour la même application, avec l’interface traduite en anglais
# Ce fichier s’appelle anglais.properties
monBouton1 = "OK"
monBouton2 = "Cancel"
# Troisième fichier: pour la même application, avec l’interface traduite en martien (langue des petits hommes verts)
# Ce fichier s’appelle martien.properties
monBouton1 = "GlupGlup"
monBouton2 = "Gniorf"

On a ainsi 3 fichiers qui contiennent le label de tous les éléments de notre interface graphique. On va lancer notre programme en lui indiquant que l’on veut utiliser l’un ou l’autre des fichiers… selon si notre utilisateur est français, américian, ou martien !

java -Dlangue=martien.properties MaClasse

On utilise une variable que l’on appelle "langue" dans laquelle sera stockée le nom du fichier de propriétés à charger.
Il ne nous reste plus qu’à charger ce fichier dans notre programme Java.

String env = System.getProperty("langue");

Alors, quelle langue parlera notre application ? Vous dites le martien ? C’est ça !
Notre variable "langue" contient le nom du fichier de propriétés à charger, nous allons donc le charger:

Properties envVars = new Properties();
envVars.load(env);

NOTE: on a travaillé avec les propriétés, ce qui a un peu compliqué les choses, mais c’était pour donner un exemple pratique, on aurait aussi bien pu, par exemple, indiquer une image à charger:

java -Dimage=monLogo.gif MaClasse
ImageIcon img = new ImageIcon(System.getProperty("image"));

Il est très important dans tous les cas de ne pas laisser d’espace entre le -D et le nom de la variable et des deu côtés du =.

2) Second type

Si vous avec compris le premier type, vous avec compris le second, car c’est une variation du premier…

On définit une variable, par exemple:

# Sous DOS (Windows), on ajoute cette ligne à l’autoexec.bat
MON_CHEMIN_PERSO="C:\Mes Documents\Mes Images\"
# Sous UNIX
export MON_CHEMIN_PERSO=/home/moi/mes_images/:$MON_CHEMIN_PERSO

Et au lancement de notre programme Java, on écrira:

# Windows
java MaClasse %MON_CHEMIN_PERSO%
# UNIX
java MaClasse $MON_CHEMIN_PESO

La procédure pour récupérer la variable dans le programme, on la lit dans la méthode main() comme argument[0].
Personnellement je n’aime pas cette methode, mais elle existe…

3) Troisième type

Comme expliqué plus haut, le troisième type est totalement différent: vous ne pouvez pas modifier les variables d’environnement ce de type, elles sont internes au langage Java et servent à fournir des informations sur la JVM hôte.

La syntaxe pour récupérer ce genre de propriétés est la suivante:

String propriete = java.lang.System.getProperty(String prop);
Exemple:
final String USER_HOME = System.getProperty("user.home");

Voici un tableau des différentes propriétés auxquelles l’on peut avoir accès:
Sur fond bleu clair les plus utilisées.


Valeur


Signification

java.version
Version du
JRE
java.vendor
"Vendor" du JRE
java.vendor.url
URL du "Vendor"
java.vm.specification.version
JVM version de specification
java.vm.specification.vendor
JVM "vendor" de specification
java.vm.specification.name
JVM nom de specification
java.vm.version
JVM version d'implémentation
java.vm.vendor
JVM "vendor" d'implémentation
java.vm.name
JVM nom d'implémentation
java.home
Répertoire
de java.exe
java.specification.version
JRE version de specification
java.specification.vendor
JRE "vendor" de specification
java.specification.name
JRE nom de specification
java.class.version
Numéro
de version de Java
java.class.path
Le CLASSPATH
java.ext.dirs
Répertoire
des extensions
os.name
Nom du système
d'exploitation
os.arch
Nom de l'architechture de l'OS
os.version
Numéro de version de
l'OS
file.separator
Sérarateur
de fichiers (1)
line.separator
Séparateur
de lignes (2)
path.separator
Séparateur de chemins
(3)
user.name
Nom du compte utilisateur
user.home
Répertoire
par défaut de l'utilisateur
user.dir
Répertoire
où se trouve la classe principale
(1)
"/" sous UNIX
"\" sous Windows</p>

(2)
"\n" sous UNIX
"\r" sous Mac
"\n\r" sous Windows

(3)
":" sous Unix </td> </tr> </tbody> </table>

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité sur Valhalla GFBLOG.
Ecrit à Montpellier le 19 octobre 2001.