【问题标题】:System.getenv() does not list all the environment variablesSystem.getenv() 没有列出所有的环境变量
【发布时间】:2012-12-06 16:43:07
【问题描述】:

我注意到我的一些环境变量没有被 JVM 拾取。

在我的.bash_profile 中,我定义了以下内容:

IO_HOME='some_value'
export IO_HOME

在 shell 中做:

echo $IO_HOME

我得到了正确的结果。

但是System.getProperties()System.getenv() 都没有显示这个变量被设置。我尝试了 Java 6 和 Java 7。

我有什么遗漏吗?

【问题讨论】:

  • @MaLLinok 你是从 bash shell 启动你的 java 应用程序吗?
  • 要测试是Bash问题还是Java问题,可以先运行env | grep ^IO_HOME=查看env是否看到了这个变量(如果看到了,那么这是Java问题,不是Bash 问题),然后运行 ​​env IO_HOME='some_value' java your_java_program 以查看您的 Java 程序是否看到此变量(如果看到,则这是 Bash 问题,而不是 Java 问题)。如果这些给出了相互矛盾的结果,那么问题可能介于两者之间:它可能与您运行 Java 程序的方式有关。

标签: java variables system environment


【解决方案1】:

将环境导出到衍生进程非常稳定;如果System.getenv() 不包含变量,那是因为它不在环境中。需要检查的几件事都与流程的启动方式有关:

  • 您是否从导出变量的环境启动 java 进程?例如,如果它在您的 .bash_profile 中,并且您正在从菜单或桌面执行 java 程序,那么您必须在将其添加到 .bash_profile 后注销并登录才能看到该变量。

  • 变量是否从进程环境中显式删除? ProcessBuilder 允许这样做,大多数生成进程的 API 也是如此。

要尝试的一件事是在确保变量已导出到该 shell 之后,从命令行 shell 启动进程。

【讨论】:

  • 自从我第一次设置这个环境变量(一年半前)以来,我从未退出过。我认为关闭和打开我的 Mac 会自动执行此操作。好像没有!
【解决方案2】:

在 Windows 中,我最近看到一些疯狂的行为,即 IntelliJ 在设置用户或系统环境变量后拒绝显示来自System.getenv() 的所有环境变量。诀窍是从 DOS 框启动 IntelliJ。对于 Windows 用户:也许重新启动(或注销/登录)可以解决问题。

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2016-04-21
    • 1970-01-01
    • 2015-11-08
    • 2012-06-25
    • 2011-07-16
    • 2019-03-11
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多