問題產生
ubuntu 18.04環境下,執行
java -version
發現與/etc/profile中的$JAVA_HOME所設定的java版本不同。
推測原因
最近用apt install 安裝過ubuntu自帶的eclipse,有可能是把一些配置覆蓋了。
可能的解決方案
方案一
sudo gedit ~/.profile
在末尾加上:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21
然後儲存關閉,使用source更新下
$ source ~/.profile
使用env命令察看JAVA_HOME的值
$ env
如果JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21,說明配置成功。
此前我並沒有配置這個檔案,我配置的是全域性的/ect/profile,java -version也是生效的。暫時忽略。
方案二
據說java -version只顯示環境變數中的PATH所指向的第一個含有java執行檔案的版本。
開啟我的環境變數
vim /etc/environment
內容如下:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
並沒有我設定的java路徑,/usr/bin,這個,是自動安裝的openjdk的java執行檔案路徑,所以當前的版本顯示的是它。
在前面強行插入我的java路徑“/opt/jdk1.8.0_201/bin:/opt/jdk1.8.0_201/jre/bin:”,儲存
source /etc/enviroment
source 生效。這時再用
java -version
就能夠看到我設定的java的版本了。
java version "1.8.0_201"
這種方案能夠正常顯示版本,但能否正常編譯,我無法再測試,因為看到了方案三,並在嘗試方案三的時候,不知道怎樣退回。留作一個研究課題。
方案三
修改系統預設jdk
此方案來自http://www.cnblogs.com/bluestorm/archive/2012/05/10/2493592.html
# 安裝新版本的jdk $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_21/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_21/bin/javac 300
執行了上面的兩條命令,系統中就有了兩個版本的java,下面兩條命令,是設定系統預設使用哪個java
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
輸入前面的數字就可以設定預設的java版本。
再次執行java -version
就可以得到自定義的java版本了。
但是,這些設定是寫在哪裡的?就是說執行了update-alternatives以後,哪個檔案被修改了?怎樣退回去?有待研究。