Как получить доступ к системной переменной изнутри Java-программы? - PullRequest
0 голосов
/ 12 февраля 2012

echo $MY_FILE отпечатки "/path/to/some/file"

System.out.println(System.getenv("MY_FILE")); отпечатков null

Кроме того, когда я печатаю JAVA_HOME (из Eclipse), я тоже получаю null. От снаряда эхом /Library/Java/Home

Не уверен, что это актуально, но система, на которой я работаю, является mac

Есть какие-нибудь намеки?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2012

Сначала попробуйте получить доступ к системной переменной, не созданной вами, скажем

System.out.println(System.getenv("JAVA_HOME"));

Если вышеуказанное сработает, попробуйте перезагрузить виртуальную машину

Похоже, что переменная окружения находится в каком-то кешеи перезагрузка - один из способов его обновления.

0 голосов
/ 12 февраля 2012

Способ доступа к переменной окружения - именно то, о чем вы знаете. Этот код работает просто отлично, и полученные вами результаты точно сообщают вам о среде выполнения JVM, о которой вы задаете вопросы. Таким образом,

  1. Переменные среды не являются «системными переменными»: они не имеют системной области видимости; изменение их в новом терминале не изменит их в процессе запуска терминалов и т. д.

  2. Они хранятся в процессе ОС и копируются в потомки этого процесса. Таким образом, дети также не меняют переменные среды своих родителей, когда они меняют свои собственные.

  3. Если вы запускаете Eclipse, а затем устанавливаете переменные среды в .profile или в любом другом месте, а затем JVM, запускаемые из Eclipse, не отражают эти параметры, то вы знаете, что Eclipse не запускает оболочку, которая читает ваш .profile раньше запуск JVM; он может вызывать оболочку, так что он не читает .profile, он может вызывать другую оболочку в целом, он может запускать JVM напрямую, без использования оболочки.

  4. Если вы запустите Eclipse после установки этих переменных и увидите то же поведение, то вы узнали то же самое о процессе, который запускает Eclipse.

  5. Если вы перезагрузите компьютер после установки этих переменных и увидите то же поведение, то вы узнали то же самое о своей оконной среде.

Вы не можете понять, что «делаете это неправильно», когда запрашиваете значения переменных среды в Java, поскольку вы действительно делаете это правильно.

Вы можете исследовать окружающую среду с помощью System.getenv()

0 голосов
/ 12 февраля 2012

Вы, вероятно, не экспортировали переменную среды. В большинстве оболочек переменные, объявленные в оболочке, не экспортируются в среду подпроцессов, если вы не сделаете это явно, либо так:

export MY_HOME=/somewhere/over/the/rainbow

Или при вызове программы:

MY_HOME=/somewhere/over/the/rainbow java com.example.MyApplication

Также имейте в виду, что среда не является глобальной, поэтому изменения, которые вы вносите в среду, влияют только на этот процесс и его подпроцессы. Если вы хотите повлиять на среду всех процессов в вашей системе, это необходимо настроить специально. В большинстве случаев экспорт в оболочке - это то, что вам нужно.

...