直到最近我一直在使用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 -version从1.7改为1.8。
也有人可以帮助我理解:
Click here for reference,但是当我检查终端中的java -version时,它显示为:
java version "1.7.0_79"
答案 0 :(得分:2)
关闭终端实例后,未将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 -version从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 -version
和whereis java
的行为不符合您的预期。
您可以通过键入
来检查shell中的实际环境变量设置$ export
3)
$JAVA_HOME
和whereis java
命令有什么区别?
第一个是环境变量...它不是命令搜索路径。它通常由第三方工具用于定位JDK / JRE。但是JDK / JRE工具本身就忽略了它!
第二个是内置命令,它试图在shell的真实命令搜索路径中查找命令。
答案 1 :(得分:1)
关闭终端实例后,未将JAVA_HOME设置/保存到路径变量
这是不正确的。保存后,它将保存到PATH变量中。但是它不会影响当前打开的终端窗口,只会影响新窗口。关闭终端窗口与它无关。