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