【问题标题】:Mac environment variables not available to java runtime classMac 环境变量对 java 运行时类不可用
【发布时间】: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


【解决方案1】:

请参阅Java Options -Dproperty=value 以设置系统属性值。

java -DR_HOME=&lt;the-location&gt; -jar application.jar

【讨论】:

  • 谢谢。对于我的情况,调用执行 java 应用程序的程序不会知道路径,除非它本身可以访问 R_HOME 的值。
【解决方案2】:

还要注意

System.getProperty("java.home")

您不是在阅读 $JAVA_HOME,它只是打印 Java 运行时环境 (JRE) 的安装目录,请参阅 https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

我的猜测是 env-Variables 未正确设置为可在您的班级中访问

【讨论】:

  • 是的,我看到您对 System.getProperty() 的看法完全正确。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 2015-07-31
  • 2010-10-09
  • 2011-02-14
  • 1970-01-01
  • 2013-10-30
  • 2011-01-01
相关资源
最近更新 更多