【问题标题】:editing .bashrc does not change JAVA_HOME [duplicate]编辑 .bashrc 不会更改 JAVA_HOME [重复]
【发布时间】:2015-08-30 04:44:27
【问题描述】:

我想在 ubuntu 中更改为 JAVA 8。

我在 ~/.bashrc 和 /etc/environment 中更改了 JAVA_HOME 并获取了它。这导致 JAVA_HOME 发生变化。

PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/jre1.8.0_45/bin:/home/PepperBoy/Desktop/hadoopinstallation/hadoop-1.2.1/bin
PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ echo $JAVA_HOME
/usr/lib/jvm/jre1.8.0_45

PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
export JAVA_HOME="/usr/lib/jvm/jre1.8.0_45/bin/"

但是,我的 java 版本仍然显示早期版本。

PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~precise1)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

Also, running the below commmand only gives me options for java 6 and 7, not for java 8
PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
* 2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      manual mode

Press enter to keep the current choice[*], or type selection number: 

最后,运行下面的代码给了我一个符号链接,它将我指向系统正在使用的实际 java 可执行文件。我将它编辑到我下载的 java 8,现在我的 java -version 显示正确的版本。

PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ which java
/usr/bin/java
PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Apr 29  2014 /usr/bin/java -> /etc/alternatives/java
PepperBoy@PepperBoy-Inspiron-3542:~/Desktop$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Oct 17  2014 /etc/alternatives/java -> /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

我的问题是:

  1. 如果这是导致更改的唯一编辑,那么为什么 我们编辑 ~/.bashrc。看起来我所要做的就是在 linux 中运行 which 或 whereis 命令,它告诉我 /usr/bin/java 是系统正在运行的实际可执行文件,然后去编辑它以指向我拥有的新 java 版本已下载

【问题讨论】:

标签: java linux ubuntu jvm


【解决方案1】:

JAVA_HOMEother 想要调用 Java 的工具使用。他们(通常)会在 JAVA_HOME 下查找 Java(如果已设置)。如果不是,他们将使用在$PATH 上找到的任何java。如果要使用JAVA_HOME 在shell 中查找Java,则必须将其添加到PATH; shell 搜索二进制文件的方式并没有什么神奇之处,它可以在搜索 java 时做一些特别的事情。

你可以使用:

export JAVA_HOME=/usr/lib/jvm/jre1.8.0_45

export PATH=$JAVA_HOME/bin:$PATH

此外,在 Ubuntu 上,如果可以同时安装多个不同版本或类型的给定软件包,您可以使用替代系统进行控制:

$ sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press enter to keep the current choice[*], or type selection number:

【讨论】:

  • 谢谢。但是编辑 JAVA_HOME 和 PATH 并没有给我的 java -version 带来任何变化,只有在更改 /usr/bin/java 的符号链接之后 java -version 才会显示新版本。所以我的问题是,如果添加/不添加它没有任何区别,为什么我们还要设置 JAVA_HOME?
  • 正如我所说,它确实对其他程序 想要查找Java 并遵守JAVA_HOME 产生影响。您的 shell 不会以任何方式将 JAVA_HOME 视为特殊的,它只会查看 PATH 以查找所有二进制文件。但是其他想要查找Java的工具,比如maven等,如果设置了会服从JAVA_HOME。至于更改您的 PATH 并使其不生效,您一定没有正确完成,或者可能忘记使用 hash -r 刷新 shell 的二进制文件缓存(尽管您不需要这样做,因为设置 PATH应该清除它)。
  • 为了清楚起见,对update-alternatives 的引用显示了更改符号链接 的正确方法,而不是手动进行。每当您在/bin/usr/bin(或另一个系统目录)中看到通过/etc/alternatives 解析的符号链接时,该包就是一种替代方案,如果您想更改默认替代方案,最好使用@987654339 @utility,NOT 自己手动修改符号链接。
猜你喜欢
  • 1970-01-01
  • 2016-10-19
  • 2018-04-18
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
相关资源
最近更新 更多