2015-06-14 123 views
0

我想在Ubuntu中变成JAVA 8。编辑.bashrc不会改变JAVA_HOME

我在〜/ .bashrc和/ etc/environment中更改了JAVA_HOME,并找到了它。这导致JAVA_HOME改变。

[email protected]:~/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 
[email protected]:~/Desktop$ echo $JAVA_HOME 
/usr/lib/jvm/jre1.8.0_45 

[email protected]:~/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版本仍然保持显示早期版本。

[email protected]:~/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 
[email protected]:~/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显示了正确的版本。

[email protected]:~/Desktop$ which java 
/usr/bin/java 
[email protected]:~/Desktop$ ls -l /usr/bin/java 
lrwxrwxrwx 1 root root 22 Apr 29 2014 /usr/bin/java -> /etc/alternatives/java 
[email protected]:~/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版本下载
+1

检查你的.profile文件为JAVA_HOME – Steephen

+0

在/ etc/profile中添加PATH – Asfab

回答

1

JAVA_HOME由要调用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: 
+0

谢谢。但编辑JAVA_HOME和PATH并没有在我的java -version中引起任何改变,只是在更改了/ usr/bin/java的符号链接后,java -version才显示新版本。所以我的问题是,为什么我们然后设置JAVA_HOME如果添加/不添加它没有任何区别? – PepperBoy

+0

正如我所说的,它确实对其他希望查找Java的程序有所影响,并遵守'JAVA_HOME'。你的shell不会以任何方式将'JAVA_HOME'视为特殊的,它只查找'PATH'来查找所有的二进制文件。但是其他想要查找Java的工具,比如maven等,如果它被设置,它将服从'JAVA_HOME'。至于改变你的PATH并让它不起作用,你必须要么做得不对,要么可能忘记用'hash -r'来刷新shell的缓存二进制文件(尽管你不需要这样做, PATH'应该清除它)。 – MadScientist

+0

需要说明的是,对'update-alternatives'的引用显示了正确的方式来更改symlink_,而不是手工完成。无论何时,当你在'/ bin'或'/ usr/bin'(或另一个系统目录)中看到一个通过'/ etc/alternatives'解析的符号链接时,这个包就是一个替代方案,如果你想改变默认的替代方案最好使用'update-alternatives'实用程序,_NOT_手动修改符号链接。 – MadScientist