2015-10-28 59 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的值。 –