詳解Java安裝及環境變量配置(Windows&Linux)

前面有一篇《環境變量詳解》介紹了 Windows 和 Linux 系統下的環境變量,這里介紹一下 Java 的安裝及其環境變量配置。

Windows 下安裝 Java

Oracle 官網上下載 JDK 的 Windows 版安裝文件(下載時需要同意協議并登錄 Oracle 賬號),我下載的是 jdk-8u311-windows-x64.exe

image-20211030114604827.png

下載完成之后雙擊 exe 文件,然后按照安裝向導一步步向下點擊就可以了。

Windows 下配置 Java 環境變量

步驟如下:

  1. JDK 安裝完畢后需要設置 JAVA 環境變量。先將 JDK 主目錄添加到 JAVA_HOME 環境變量:
image-20211030115236423.png

看到這里你可能會有這樣的疑問:為什么安裝到了 C 盤而不是其他盤,難道不怕影響系統性能嗎?哥的 C 盤是固態硬盤,安裝到其他盤反而會發揮不出固態硬盤的性能(SSD 黨在這里驕(zhuang)傲(bi)三秒鐘,哈哈),為什么不是 Program files 默認目錄呢?因為系統默認目錄可能會有寫權限的限制,我就把所有開發相關的軟件統一安裝到了一個自定義目錄 softwares 中了。

  1. 然后在將 JDK 的 bin 目錄添加到 Path 環境變量中.選中用戶的 Path 環境變量,選擇編輯按鈕,在彈出的對話框中,點擊新建按鈕,將 %JAVA_HOME% 目錄添加到 Path中:
TIM截圖20171022112309.png
  1. 驗證。在命令行中輸入 java --version 命令,可以看到如下提示說明環境變量設置成功并生效:

    C:\Users\vincent>java -version
    java version "1.8.0_311"
    Java(TM) SE Runtime Environment (build 1.8.0_311-b01)
    Java HotSpot(TM) 64-Bit Server VM (build 25.311-b01, mixed mode)
    

神馬?明明設置了環境變量但是提示找不到 java 命令,那試試簽名介紹的如何刷新 Windows 下的環境變量設置吧。

你可能從網上看到過 Java 還需要配置 CLASSPATH 環境變量的,該環境變量主要用來告知 JRE 去哪里尋找所要運行的 .class 文件(可能在一個 jar 包中),這個環境變量通常設置為:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

其中,. 表示當前目錄,dt.jartools.jar 包含編譯和運行java程序的 .class 文件。其實從 JDK 1.5 開始,JRE會自動搜索當前目錄下的 .class 文件,當使用 Java 的編譯和運行工具是,系統會自動加載dt.jartools.jar 中包含的 .class 文件。所以,從 JDK 1.5 開始 CLASSPATH 環境變量就不需要設置了,但是,只要設置了就必須設置為上面的值,否則編譯或運行 Java 程序就會出錯。

Linux 下安裝 Java

通過 rpm 文件安裝

Oracle 官網上下載 JDK 安裝文件(下載時可能需要登錄 Oracle 賬號),我下載的為:jdk-8u311-linux-x64.rpm。這種方式會自動創建一些可能被其他基于 Java 程序所使用的鏈接文件,建議使用這種方式安裝。

image.png

下載完 rpm 文件之后使用 FTP 工具將 jdk-8u311-linux-x64.rpm 安裝文件上傳至 Linux 的某個用戶目錄中(我這里為 /home/tomcat 目錄),然后安裝 jdk-8u311-linux-x64.rpm。如下所示。

[root@localhost tomcat]# yum localinstall jdk-8u311-linux-x64.rpm
# 安裝完成之后使用 java -version 命令可以看到版本號
[root@localhost ~]# java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
# 執行 echo $JAVA_HOME 命令輸出為空,因為此時并未設置 JAVA_HOME 環境變量
[root@localhost tomcat]# echo $JAVA_HOME

# 未設置環境變量為什么也能執行 java -version 命令呢,我們通過執行 whereis java 發現這種安裝方式創
# 建了一個最終鏈接到 /usr/java/jdk1.8.0_311-amd64/bin/java 可執行文件的鏈接文件 /usr/bin/java,
# 而位于 /usr/bin 目錄下的可執行文件會被默認查找
[root@localhost tomcat]# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1
[root@localhost tomcat]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 10月 30 10:18 /usr/bin/java -> /etc/alternatives/java
[root@localhost tomcat]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 37 10月 30 10:18 /etc/alternatives/java -> /usr/java/jdk1.8.0_311-amd64/bin/java
[root@localhost tomcat]# ll /usr/java/jdk1.8.0_311-amd64/bin/java
-rwxr-xr-x. 1 root root 8712 9月  27 20:26 /usr/java/jdk1.8.0_311-amd64/bin/java
# JDK 默認安裝到了 /usr/java 目錄下
[root@localhost tomcat]# ll /usr/java/jdk1.8.0_311-amd64
總用量 25812
drwxr-xr-x. 2 root root     4096 10月 30 10:18 bin
-rw-r--r--. 1 root root     3244 9月  27 20:26 COPYRIGHT
drwxr-xr-x. 3 root root      132 10月 30 10:18 include
-rw-r--r--. 1 root root  5235749 9月  27 17:16 javafx-src.zip
-rw-r--r--. 1 root root      195 9月  27 20:26 jmc.txt
drwxr-xr-x. 6 root root      198 10月 30 10:18 jre
drwxr-xr-x. 4 root root       31 10月 30 10:18 legal
drwxr-xr-x. 4 root root      223 10月 30 10:18 lib
-rw-r--r--. 1 root root       44 9月  27 20:26 LICENSE
drwxr-xr-x. 4 root root       47 10月 30 10:18 man
-rw-r--r--. 1 root root      159 9月  27 20:26 README.html
-rw-r--r--. 1 root root      486 9月  27 20:26 release
-rw-r--r--. 1 root root 21158373 9月  27 20:26 src.zip
-rw-r--r--. 1 root root      190 9月  27 17:16 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r--. 1 root root      190 9月  27 20:26 THIRDPARTYLICENSEREADME.txt
# 可以查看一下安裝包的信息
[root@localhost tomcat]# rpm -qa | grep jdk1.8*
jdk1.8-1.8.0_311-fcs.x86_64
[root@localhost ~]# rpm -qlicdR jdk1.8-1.8.0_311-fcs.x86_64
Name        : jdk1.8
Epoch       : 2000
Version     : 1.8.0_311
Release     : fcs
Architecture: x86_64
Install Date: 2021年10月30日 星期六 10時18分18秒
Group       : Development/Tools
Size        : 269439310
License     : https://java.com/otnlicense
Signature   : RSA/SHA256, 2021年09月27日 星期一 20時58分24秒, Key ID 72f97b74ec551f03
Source RPM  : jdk1.8-1.8.0_311-fcs.src.rpm
Build Date  : 2021年09月27日 星期一 20時33分16秒
Build Host  : java.com
Relocations : /usr/java
Vendor      : Oracle Corporation
URL         : http://www.oracle.com/technetwork/java/javase/overview/index.html
Summary     : Java Platform Standard Edition Development Kit
Description :
The Java Platform Standard Edition Development Kit (JDK) includes both
the runtime environment (Java virtual machine, the Java platform classes
and supporting files) and development tools (compilers, debuggers,
tool libraries and other tools).

The JDK is a development environment for building applications, applets
and components that can be deployed with the Java Platform Standard
Edition Runtime Environment.
/bin/basename
/bin/cat
/bin/cp
/bin/gawk
/bin/grep
/bin/ln
/bin/ls
/bin/mkdir
/bin/mv
/bin/pwd
/bin/rm
/bin/sed
/bin/sort
/bin/touch
/usr/bin/cut
/usr/bin/dirname
/usr/bin/expr
/usr/bin/find
/usr/bin/tail
/usr/bin/tr
/usr/bin/wc
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
通過 .tar.gz 文件安裝

當然也可以下載 .tar.gz 格式的 JDK 安裝文件,我下載的是 jdk-8u311-linux-x64.tar.gz。下載完 tar.gz 文件之后使用 FTP 工具將 jdk-8u311-linux-x64.tar.gz 安裝文件上傳至 Linux 的某個用戶目錄中,然后解壓 jdk-8u311-linux-x64.tar.gz 文件,并將解壓后的目錄復制到 /usr/java/ 目標安裝目錄(最好跟 rpm 安裝方式的安裝位置相同)下。如下所示。

[root@localhost tomcat]# tar -xzvf jdk-8u311-linux-x64.tar.gz
[root@localhost tomcat]# ll
總用量 255976
drwxr-xr-x. 8 10143 10143       273 9月  27 20:29 jdk1.8.0_311
-rw-r--r--. 1 root  root  146799982 10月 30 11:16 jdk-8u311-linux-x64.tar.gz
[root@localhost tomcat]# cp -r jdk1.8.0_311 /usr/java/

這種安裝方式在某些時候可能需要手動創建一些鏈接文件才可以運行基于 Java 的程序,比如 Jenkins 啟動時會自動查找 /usr/bin/java 文件并將其作為可執行的 java 文件,這時需要使用 ln -s 命令手動創建 /usr/bin/java 符號鏈接文件,將其鏈接到目標安裝目錄中的 java 可執行文件。如下所示。

[root@localhost bin]# ln -s /usr/java/jdk1.8.0_311-amd64/bin/java /usr/bin/java
[root@localhost bin]# /usr/bin/java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

需要時再創建上述符號鏈接文件也可以。

Linux 下配置 Java 環境變量

  1. 設置系統環境變量。通過 rpm 文件的方式不顯式設置 JAVA_HOME 環境變量就可以直接運行 java 可執行文件,那么不設置 JAVA_HOME 環境變量是不是就可以了呢?其實不然,許多基于 Java 的程序,比如 Ant、Maven、Tomcat 等啟動時都會查找并使用 JAVA_HOME 環境變量的值。所以設置 JAVA_HOME 環境變量是非常有必要的,如果通過解壓 tar.gz 壓縮歸檔文件的方式安裝 JDK 就更要設置 JAVA_HOME 環境變量了,否則根本無法隨處運行 java 可執行文件。

    使用 sudo vim /etc/profile.d/jdk_env.sh 命令新建一個 sh 文件,并配置以下環境變量:

    # Oracel Java Environment Variable Configuration Start
    export JAVA_HOME=/usr/java/jdk1.8.0_311-amd64
    # CLASSPATH is not necessary since JDK 1.5
    #export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    # Oracel Java Environment Variable Configuration End
    

    使用 vim 保存后,可以執行 cat /etc/profile.d/jdk_env.sh 查看一下配置是否正確。

  2. 更新環境變量。修改完成后,使用 sudo source /etc/profile 命令進行更新(/etc/profile 文件會讀取 /etc/profile.d/jdk_home.sh 中的配置)。如果該命令操作失敗,提示權限不足,那么將 $JAVA_HOME/lib/dt.jar$JAVA_HOME/lib/tools.jar 這兩個文件的權限修改為可執行,然后重新執行 sudo source /etc/profile 命令:

    [root@localhost jdk1.8.0_311-amd64]# source /etc/profile
    -bash: /usr/java/jdk1.8.0_311-amd64/lib/tools.jar: Permission denied
    [root@localhost tomcat]# cd /usr/java/jdk1.8.0_311-amd64/lib
    [root@localhost lib]# ll
    total 39780
    drwxr-xr-x. 3 root root     4096 May 23 21:03 amd64
    -rw-r--r--. 1 root root  1218653 Mar 29 08:21 ant-javafx.jar
    -rw-r--r--. 1 root root 18229876 Mar 29 08:15 ct.sym
    -rw-r--r--. 1 root root   159870 Mar 29 08:21 dt.jar
    -rw-r--r--. 1 root root    18432 Mar 29 08:15 ir.idl
    -rw-r--r--. 1 root root    35992 Mar 29 08:23 javafx-mx.jar
    -rw-r--r--. 1 root root   404452 Mar 29 08:21 jconsole.jar
    -rwxr-xr-x. 1 root root    10493 Mar 29 08:21 jexec
    drwxr-xr-x. 7 root root     4096 May 23 21:03 missioncontrol
    -rw-r--r--. 1 root root      640 Mar 29 08:15 orb.idl
    -rw-r--r--. 1 root root     4633 Mar 29 08:23 packager.jar
    -rw-r--r--. 1 root root  2381736 Mar 29 08:21 sa-jdi.jar
    -rw-r--r--. 1 root root 18233649 May 23 21:03 tools.jar
    drwxr-xr-x. 6 root root     4096 May 23 21:03 visualvm
    [root@localhost lib]# chmod 751 dt.jar
    [root@localhost lib]# chmod 751 tools.jar
    [root@localhost lib]# ll
    total 39780
    -wxr-xr-x. 3 root root     4096 May 23 21:03 amd64
    -rw-r--r--. 1 root root  1218653 Mar 29 08:21 ant-javafx.jar
    -rw-r--r--. 1 root root 18229876 Mar 29 08:15 ct.sym
    -rwxr-x--x. 1 root root   159870 Mar 29 08:21 dt.jar
    -rw-r--r--. 1 root root    18432 Mar 29 08:15 ir.idl
    -rw-r--r--. 1 root root    35992 Mar 29 08:23 javafx-mx.jar
    -rw-r--r--. 1 root root   404452 Mar 29 08:21 jconsole.jar
    -rwxr-xr-x. 1 root root    10493 Mar 29 08:21 jexec
    drwxr-xr-x. 7 root root     4096 May 23 21:03 missioncontrol
    -rw-r--r--. 1 root root      640 Mar 29 08:15 orb.idl
    -rw-r--r--. 1 root root     4633 Mar 29 08:23 packager.jar
    -rw-r--r--. 1 root root  2381736 Mar 29 08:21 sa-jdi.jar
    -rwxr-x--x. 1 root root 18233649 May 23 21:03 tools.jar
    drwxr-xr-x. 6 root root     4096 May 23 21:03 visualvm
    [root@localhost jdk1.8.0_171-amd64]# source /etc/profile
    

卸載 Open JDK

有的 Linux 系統中預裝了 Open JDK,所以即使上面進行了上面這些步驟,可能系統默認的 JDK 還不是 Oracle JDK,如果要真正使用 Oracle JDK,可以選擇卸載 Open JDK:

[root@localhost ~]# rpm -qa | grep openjdk
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk-headless  
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-headless
[root@localhost ~]# rpm -qa | grep openjdk
[root@localhost ~]# 

確定 Open JDK 已經完全卸載了,然后就可以為 Oracle JDK 設置環境變量了。當然,也可以不卸載 Open JDK 而直接安裝 Oracle JDK,然后為 Oracle JDK 設置環境變量就行了。

使用 java -version 命令來查看我們的 java 環境變量,顯示如下版本信息說明大功告成:

[root@localhost tomcat]# echo $JAVA_HOME
/usr/java/jdk1.8.0_171-amd64
[root@localhost tomcat]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@localhost tomcat]# javac -version
javac 1.8.0_171
[root@localhost tomcat]# 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370