web-dev-qa-db-fra.com

Passer des variables d'environnement à une JVM, de manière indépendante de la plateforme

Je développe une application J2EE qui s'exécute dans JBoss sur une machine Windows Vista, mais l'application se retrouvera sur une machine Linux. Existe-t-il un moyen de transmettre la valeur d'une variable d'environnement d'une manière indépendante de la plate-forme?

Je pense (mais je ne suis pas sûr) que la méthode sensible à la plate-forme serait:

-Denv_var=%MY_ENV_VAR% (Windows)
-Denv_var=$MY_ENV_VAR (Linux)

et à partir de là j'accéderais à la valeur (en Java) en utilisant

System.getProperty("MY_ENV_VAR");

- Est-ce exact?

Le Javadoc pour System.getenv(String name) semble impliquer que la méthode dépend de la plateforme, mais je ne suis pas clair à ce sujet. Puis-je ignorer le passage de la variable dans la JVM et utiliser getenv() après avoir défini la valeur d'une variable d'environnement à l'aide du système d'exploitation?

24
Matt Ball

System.getenv () est indépendant de la plateforme par lui-même. En utilisant votre exemple ci-dessus, vous pouvez très certainement écrire

String value = System.getenv("MY_ENV_VAR")

et cela fonctionnera à la fois sur Linux et Windows. Aucune raison d'envelopper cela dans Java. Cela dit, la partie "dépendante de la plate-forme" de getenv() réside dans le fait que différents systèmes d'exploitation utilisent différentes variables d'environnement, comme PATH sous windows vs path sous Linux. Mais tant que vous utilisez vos propres variables et que vous les nommez de manière cohérente (toujours en majuscules, par exemple), tout ira bien.

24
ChssPly76

Comment j'interprète le tutoriel Java sur ce sujet est que getenv fonctionne de manière indépendante de la plateforme, mais que vous devez garder à l'esprit que les variables ne sont pas nommées de manière cohérente sur toutes les plateformes Puisque vous semblez régler vous-même la variable, cela ne s'applique pas à vous.

1
Alexander Torstling

Oui - getEnv () renverra simplement le nom de la variable d'environnement, et vous pouvez le définir de la manière appropriée à la plate-forme sur laquelle vous exécutez (généralement via un fichier de commandes de lancement sur Win32). Il est recommandé de se rabattre sur les valeurs par défaut sensibles basées sur la plate-forme (en inspectant System.getProperty("os.name")), si cela est possible, vous voulez éviter que vos utilisateurs ne se soucient d'avoir à jouer avec les variables d'environnement pour exécuter votre logiciel.

1
Tim Gilbert