2015-06-14 126 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