2015-10-28 2 views
0

В java, я пытаюсь получить доступ к двум переменным среды, которые я ранее установил на своем компьютере Mac (работает с Yosemite). Я установил значения для двух переменных: JAVA_HOME и R_HOME. При установке R_HOME я сделал это, отредактировав: ~/Library/launchacents/environment.plist.Переменные среды Mac недоступны для класса среды java

Используя терминал на mac, я могу использовать команду «printenv» и получить значения для обеих переменных.

Когда я запускаю мое приложение Java в рамках Eclipse, я могу получить значение JAVA_HOME с помощью:

System.out.println("javahome: " + System.getProperty("java.home")); 

Я использовал следующий код для отображения переменных окружения, доступные для моего Java-приложения (список доступных значений что этот код выхода не включает ни JAVA_HOME, ни R_HOME):

Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 

Мое приложение должно быть автономным, поэтому установка переменных окружения в конфигурации Eclipse, Run не будет полезным. Кроме того, мое приложение не будет знать значение R_HOME при его запуске; значение должно быть уже установлены таким образом, приложение может получить доступ к нему во время выполнения и использовать значение, чтобы запустить исполняемый файл, как:

ProcessBuilder pb = new ProcessBuilder("$R_HOME/library/Rserve/libs/Rserve"); 
Process p = pb.start(); 

Итак, мой вопрос: как может мой доступ к Java-приложение значение из Переменная среды R_HOME. Либо мне нужен новый способ установки переменной, чтобы она была доступна JVM, либо мне нужен новый метод java для вызова для доступа к значению.

+0

У вас есть t для установки переменной при запуске приложения Java? 'java -jar app.jar -Dr.home = $ R_HOME' – andy

+0

@andy. Спасибо за рассмотрение этого вопроса. Сценарий заключается в том, что несколько пользователей пройдут процесс установки R, установив R_HOME, а затем загрузив и установив приложение java. Приложение java будет запускаться с помощью существующего Java-приложения на компьютере пользователя. Явное приложение, которое я создаю, потребует, чтобы пользователь уже установил R_HOME перед его запуском. –

ответ

0

См Java Options-D свойство = значение для установки значения свойства системы.

java -DR_HOME=<the-location> -jar application.jar

+0

спасибо. В моей ситуации программа, которая делает вызов для выполнения Java-приложения, не будет знать путь, если только он сам не сможет получить доступ к значению R_HOME. –

0

отметить также, что с

System.getProperty("java.home") 

вы не читаете $ JAVA_HOME, он просто печатает каталог для установки Java Runtime Environment (JRE), см https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

Мои предположим, что env-Variables установлены неправильно в вашем классе

+0

Да, я вижу, что вы правильно относитесь к System.getProperty(). Благодарю. –

Смежные вопросы