我注意到我的一些环境变量没有被 JVM 拾取。
在我的.bash_profile
我定义了以下内容:
IO_HOME='some_value'
export IO_HOME
并通过在 shell 中执行:
echo $IO_HOME
我得到正确的结果。
但既没有System.getProperties()
也没有System.getenv()
显示这个变量被设置。我尝试了 Java 6 和 Java 7。
有什么我想念的吗?
我注意到我的一些环境变量没有被 JVM 拾取。
在我的.bash_profile
我定义了以下内容:
IO_HOME='some_value'
export IO_HOME
并通过在 shell 中执行:
echo $IO_HOME
我得到正确的结果。
但既没有System.getProperties()
也没有System.getenv()
显示这个变量被设置。我尝试了 Java 6 和 Java 7。
有什么我想念的吗?
将环境导出到衍生进程非常稳定;如果System.getenv()
不包含变量,那是因为它不在环境中。需要检查的几件事都与流程的启动方式有关:
您是否从导出变量的环境启动 java 进程?例如,如果它在您的 .bash_profile 中,并且您正在从菜单或桌面执行 java 程序,那么您必须在将其添加到 .bash_profile 后注销并登录才能看到该变量。
变量是否从流程的环境中显式删除?ProcessBuilder允许这样做,大多数生成进程的 API 也是如此。
要尝试的一件事是在确保变量在该 shell 中导出之后,从命令行 shell 启动该过程。
在 Windows 中,我最近看到一些疯狂的行为,即 IntelliJSystem.getenv()
在设置用户或系统环境变量后拒绝显示所有环境变量。诀窍是从 DOS 框启动 IntelliJ。对于 Windows 用户:也许重新启动(或注销/登录)将解决问题。