【问题标题】:JAVA_HOME isn't being set/ saved to the path variable after the terminal instance is being closed关闭终端实例后,未将 JAVA_HOME 设置/保存到路径变量
【发布时间】:2017-05-02 04:11:39
【问题描述】:

直到最近我的代码库一直使用 Java 1.7,最近我们升级到了 Java 8。 当我试图将 .bash_profile / .bashrc 文件中的 JAVA_HOME 变量设置为:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

并保存并使用源 .bash_profile,java -version 指向:

Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

但是当我退出终端/关闭会话并重新检查 java - 版本时,它会指向旧版本:

Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

您能否帮我永久设置 JAVA_HOME 路径,这样我每次登录终端时都无需运行源 .bash_profile 以将 java 版本从 1.7 更改为 1.8。

也有人可以帮助我理解:

  1. .bash_profile 和 .bashrc 文件的区别。
  2. 当我在系统偏好设置中检查 Java 运行时版本时,它被指向 1.8

Click here for reference,但是当我在终端中检查 java -version 时,它显示为:

java version "1.7.0_79"
  1. $JAVA_HOMEwhereis java 命令有什么区别?

【问题讨论】:

  • 你在哪个版本的Mac OS X
  • mac OS Sierra 版本 10.12.2(前两天刚升级)。

标签: java bash macos terminal environment-variables


【解决方案1】:

在终端实例关闭后,JAVA_HOME 没有被设置/保存到路径变量

没错。在普通 shell 中,您对 shell 中的环境变量所做的更改会在 shell 退出时丢失。 (这适用于 Linux、UNIX、Mac OS 甚至 Windows “cmd.exe”。)

在 Linux、UNIX 和(我猜)Mac OS 上处理这个问题的正常方法是将 shell 命令设置为 shell 的“rc”文件之一,或者放入一个包装脚本中您用来运行 Java 应用程序(或其他)。


你能帮我永久设置 JAVA_HOME 路径,这样我每次登录终端时都不需要运行源 .bash_profile 以将 java 版本从 1.7 更改为 1.8。

在 UNIX / Linux 上,一种可能性是将全局设置放入 /etc/profile。但是,我不知道这是否适合 MacOS。在您的情况下,可能是您将设置放入了错误的文件中,或者您将 错误的设置 放入了正确的文件中。

但这就是“man bash”关于 shell 初始化的说法(在我的 Linux 系统上):

当 bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令,如果该文件存在的话。读取该文件后,它会按顺序查找~/.bash_profile~/.bash_login~/.profile,并从第一个存在且可读的文件中读取并执行命令。 ...

当一个不是登录 shell 的交互式 shell 启动时,bash 读取并执行来自 ~/.bashrc 的命令,如果该文件存在的话。这可以通过使用--norc 选项来禁止。 --rcfile 文件选项将强制 bash 从文件而不是 ~/.bashrc 读取和执行命令。


也有人可以帮助我理解:1).bash_profile 和 .bashrc 文件之间的区别。

见上文。


2) 当我在系统偏好设置中检查 Java 运行时版本时,它被指向 1.8,但是当我运行时

$ java -version

我得到这个输出:

java version "1.7.0_79"

我的猜测是,您的 shell 初始化文件会覆盖您在系统偏好设置中设置的内容。另外,我怀疑您可能误解了 shell 如何查找命令。正如“man bash”所解释的,shell实际上会使用$PATH 变量搜索命令。这是您应该检查的变量,以找出为什么 java -versionwhereis java 的行为不符合您的预期。

您可以通过键入来检查 shell 中的实际环境变量设置是什么

$ export

3) $JAVA_HOMEwhereis java 命令有什么区别?

第一个是环境变量...不是命令搜索路径。 第三方工具通常使用它来定位JDK / JRE。但是JDK/JRE工具本身就忽略了!

第二个是一个内置命令,它试图在 shell 的 real 命令搜索路径上查找命令。

【讨论】:

    【解决方案2】:

    在终端实例关闭后,JAVA_HOME 没有被设置/保存到路径变量

    这是不正确的。保存后它会立即保存到 PATH 变量中。但是,它不会影响当前打开的终端窗口,只会影响新的终端窗口。关闭终端窗口与此无关。

    【讨论】:

    • 即使在我关闭并打开一个新的终端实例后也没有保存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2016-09-16
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多