2015-10-28 57 views
0

在java中,我試圖訪問我以前在Mac電腦上運行的兩個環境變量(運行Yosemite)。我爲兩個變量設置了值:JAVA_HOME和R_HOME。在設置R_HOME時,我通過編輯完成了:〜/ Library/launchagents/environment.plist。Mac環境變量不適用於java運行時間類

在Mac上使用終端,我可以使用'printenv'命令並獲取兩個變量的值。

當我運行在Eclipse中我的Java應用程序,我可以用得到的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運行配置中的環境變量不會有幫助。此外,我的應用程序在運行時不會知道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應用程序啓動。我正在構建的Java應用程序將要求用戶在運行之前已經設置了R_HOME。 –

回答

0

參見Java Options-D 屬性=用於設置系統屬性值值

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

+0

謝謝。對我的情況來說,調用執行Java應用程序的程序不會知道路徑,除非它本身可以訪問R_HOME的值。 –