【发布时间】:2016-01-28 18:27:37
【问题描述】:
在 java 中,我试图访问我之前在我的 Mac 计算机(运行 Yosemite)上设置的两个环境变量。我为两个变量设置了值:JAVA_HOME 和 R_HOME。设置 R_HOME 时,我通过编辑:~/Library/launchagents/environment.plist 来完成。
在 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 Run 配置中设置环境变量不会有帮助。此外,我的应用程序在运行时不会知道 R_HOME 的值;该值必须已设置,以便应用程序可以在运行时访问它并使用该值来启动可执行文件,如下所示:
ProcessBuilder pb = new ProcessBuilder("$R_HOME/library/Rserve/libs/Rserve");
Process p = pb.start();
所以,我的问题是:我的 java 应用程序如何访问 R_HOME 环境变量的值。要么我需要一种新的方法来设置变量以便 JVM 可以使用它,要么我需要一个新的 java 方法来调用以访问该值。
【问题讨论】:
-
您是否尝试在启动 Java 应用程序时设置变量?
java -jar app.jar -Dr.home=$R_HOME -
@andy。感谢您考虑这个问题。场景是多个用户会经历安装R、设置R_HOME然后下载和安装java应用程序的过程。 java 应用程序本身将由用户机器上的现有 java 应用程序启动。我正在构建的 java 应用程序将要求用户在运行它之前已经设置了 R_HOME。
标签: java macos terminal environment-variables osx-yosemite