前面有一篇《環境變量詳解》介紹了 Windows 和 Linux 系統下的環境變量,這里介紹一下 Java 的安裝及其環境變量配置。
Windows 下安裝 Java
到 Oracle 官網上下載 JDK 的 Windows 版安裝文件(下載時需要同意協議并登錄 Oracle 賬號),我下載的是 jdk-8u311-windows-x64.exe
。
下載完成之后雙擊 exe 文件,然后按照安裝向導一步步向下點擊就可以了。
Windows 下配置 Java 環境變量
步驟如下:
- JDK 安裝完畢后需要設置 JAVA 環境變量。先將 JDK 主目錄添加到 JAVA_HOME 環境變量:
看到這里你可能會有這樣的疑問:為什么安裝到了 C 盤而不是其他盤,難道不怕影響系統性能嗎?哥的 C 盤是固態硬盤,安裝到其他盤反而會發揮不出固態硬盤的性能(SSD 黨在這里驕(zhuang)傲(bi)三秒鐘,哈哈),為什么不是
Program files
默認目錄呢?因為系統默認目錄可能會有寫權限的限制,我就把所有開發相關的軟件統一安裝到了一個自定義目錄 softwares 中了。
- 然后在將 JDK 的 bin 目錄添加到 Path 環境變量中.選中用戶的 Path 環境變量,選擇
編輯
按鈕,在彈出的對話框中,點擊新建
按鈕,將%JAVA_HOME%
目錄添加到 Path中:
-
驗證。在命令行中輸入
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.jar
和 tools.jar
包含編譯和運行java程序的 .class 文件。其實從 JDK 1.5 開始,JRE會自動搜索當前目錄下的 .class 文件,當使用 Java 的編譯和運行工具是,系統會自動加載dt.jar
和 tools.jar
中包含的 .class 文件。所以,從 JDK 1.5 開始 CLASSPATH 環境變量就不需要設置了,但是,只要設置了就必須設置為上面的值,否則編譯或運行 Java 程序就會出錯。
Linux 下安裝 Java
通過 rpm 文件安裝
到 Oracle 官網上下載 JDK 安裝文件(下載時可能需要登錄 Oracle 賬號),我下載的為:jdk-8u311-linux-x64.rpm
。這種方式會自動創建一些可能被其他基于 Java 程序所使用的鏈接文件,建議使用這種方式安裝。
下載完 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 環境變量
-
設置系統環境變量。通過 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
查看一下配置是否正確。 -
更新環境變量。修改完成后,使用
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]#