2016-12-16 110 views
1

我一直在使用Java 1.7直到最近我的代码库,最近我们已经升级到java 8。 当我试图设置在.bash_profile中JAVA_HOME变量/ .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的版本点:

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的版本其表现为:

java version "1.7.0_79" 
  • 什么是$ JAVA_HOMEwhereis java的合作之间的区别命令?
  • +0

    你在哪个版本的Mac OS X中? – Inian

    +0

    mac OS Sierra版本10.12.2(刚刚两天前升级)。 –

    回答

    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的版本从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初始化文件是否覆盖了你在System Prefer中设置的内容分配办法。另外,我怀疑你可能误解了shell如何找到命令。正如“man bash”所解释的,shell将实际上是使用$PATH变量搜索命令。这是你应该检查的变量,以找出为什么java -versionwhereis java不符合你的期望。

    您可以检查一下实际的环境变量设置在一个外壳通过键入

    $ export 
    

    3)是什么$JAVA_HOMEwhereis java命令之间的区别?

    第一个是环境变量......它不是命令搜索路径。它通常被第三方工具用于查找JDK/JRE。但是JDK/JRE工具本身忽略它!

    第二个是内置命令,它试图在shell的真实命令搜索路径上找到命令。

    1

    JAVA_HOME没有被置位/保存到路径变量终端实例被关闭

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

    +0

    即使关闭并打开终端的新实例后,它仍然不会保存。 –