System.getenv() liefert nicht eine Liste aller Umgebungsvariablen
Habe ich bemerkt, dass einige meiner Umgebungsvariablen werden nicht abgeholt wird von der JVM.
In meinem .bash_profile
ich Folgendes definiert:
IO_HOME='some_value'
export IO_HOME
ist und in der shell:
echo $IO_HOME
Bekomme ich das richtige Ergebnis.
Aber weder System.getProperties()
noch System.getenv()
zeigt diese variable gesetzt wird. Ich habe sowohl Java 6 und Java 7.
Gibt es etwas, was ich bin fehlt?
- ja, keine Leerzeichen vorhanden sind
- mögliche Duplikate von öffnen Sie die shell-Umgebungsvariablen mit Java
- werden Sie beim starten der java-Anwendung aus einer bash-shell?
- Um zu testen, ob es ein Bash-Problem oder ein Java-Problem, können Sie erst ausführen
env | grep ^IO_HOME=
um zu sehen, obenv
sieht diese variable (wenn Sie es tut, dann ist das ein Java-Problem, nicht ein Bash-Problem), und führen Sie dannenv IO_HOME='some_value' java your_java_program
zu sehen, ob Ihr Java-Programm sieht diese variable (wenn Sie es tut, dann ist dies ein Bash-Problem, nicht ein Java-Problem). Wenn diese widersprüchliche Ergebnisse, dann ist das problem vermutlich irgendwo dazwischen: es ist wahrscheinlich, wie Sie die Java-Programm.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Export Umgebung hervorgebracht Prozesse ist ziemlich stabil; wenn
System.getenv()
ist nicht wie eine variable, dann ist es, weil es nicht in die Umwelt. Ein paar Dinge zu überprüfen, sowohl in Bezug auf, wie der Prozess gestartet wird:Sind Sie ab der java-Prozess in einer Umgebung, wo die variable exportiert wird? Zum Beispiel, wenn es in Ihr .bash_profile und Sie die Ausführung des java-Programms aus einem Menü oder auf dem desktop, dann müssen Sie sich Abmelden und anmelden nach dem hinzufügen in .bash_profile für Ihren desktop zu sehen, die variable.
Ist die variable explizit entfernt von der Umwelt für den Prozess? ProcessBuilder können diese, wie die meisten APIs, die spawn-Prozesse.
Eins, was zu versuchen ist, um den Prozess zu starten von Befehlszeilen-shell, nachdem Sie sich vergewissert haben die variable exportiert wird in die Schale.
Von Windows, vor kurzem sah ich einige verrückte Verhalten, wo IntelliJ zeigen wollte alle env-vars aus
System.getenv()
nach Einstellung entweder Benutzer-oder system-env vars. Der trick war, starten IntelliJ aus einer DOS-box. Für Windows-Benutzer: Vielleicht ist ein Neustart (oder logoff/logon) das Problem zu beheben.