web-dev-qa-db-fra.com

System.getenv () renvoie la valeur null lorsque la variable d'environnement existe

J'essaie de System.getenv() pour obtenir la valeur d'une variable d'environnement que j'ai définie via mon terminal (Mac). J'ai également défini la variable dans mon fichier .bash_profile et je l'ai rechargée. Après cela, j'ai répercuté la valeur et la valeur correcte a été imprimée sur le terminal. En essayant de récupérer la valeur de la variable (je me suis assuré que j'utilisais le nom correct dans mon fichier .bash_profile et en utilisant System.getenv().

Dans le code ci-dessous, j'ai remplacé le nom de la variable par VAR_NAME :

String varValue = System.getenv("VAR_NAME");
System.out.println("Value: " + varValue);

Dans mon .bash_profile:

export VAR_NAME="foo"

"null" est imprimé lorsque j'imprime la valeur de varValue.

Quelle pourrait en être la cause?

Edit: J'ai suivi la réponse du haut ici , j'ai redémarré Eclipse et cela a fonctionné!

43
SamTebbs33

La réponse à cette question est plus générale que juste System.getenv() en Java.

Les variables d'environnement descendent uniquement dans l'arborescence des processus et uniquement lorsqu'un processus est lancé. Eclipse est un processus enfant de votre shell. Par conséquent, il a hérité de toutes les variables d'environnement définies sur votre shell lors du lancement d'Eclipse .

Vous avez probablement défini la variable d’environnement sur votre shell après le lancement d’Eclipse. Par conséquent, Eclipse et son enfant Java le processus créé par celui-ci a été créé) ne "sauront jamais" à propos de votre nouvelle variable d'environnement.

En raison de ce comportement, la solution consiste à quitter Eclipse et à le relancer à partir de votre shell, dans lequel la variable d'environnement est déjà définie . Une autre option consiste à accéder à la configuration d'exécution du projet et à y définir la variable d'environnement.

P.S.

  1. Évidemment, si vous redémarrez votre ordinateur, les variables d'environnement que vous avez définies sur votre shell ne seront pas enregistrées, simplement parce que le processus de shell sur lequel vous avez défini les variables disparaîtra.

  2. Si vous utilisez bash , ajoutez la commande de paramétrage de la variable d’environnement au fichier ~/.bashrc, qui est exécuté chaque fois qu'un processus bash est démarré, vous pouvez simuler le comportement de variables d'environnement permanentes.

  3. Il existe d'autres moyens de définir des variables d'environnement permanentes. Vous pouvez jeter un oeil ici pour plus d'informations.

72
SomethingSomething