Java 部署Linux 系統(tǒng)安裝JDK與環(huán)境變量配置

在當(dāng)今的軟件開發(fā)和部署領(lǐng)域,Java 依然是企業(yè)級(jí)應(yīng)用、后端服務(wù)、大數(shù)據(jù)處理乃至 Android 應(yīng)用開發(fā)的主流語(yǔ)言之一。而 Linux 系統(tǒng)作為服務(wù)器操作系統(tǒng)的首選,其穩(wěn)定、安全、開源的特性使其成為 Java 應(yīng)用部署的天然溫床。然而,要讓 Java 應(yīng)用在 Linux 上順利運(yùn)行,第一步也是最關(guān)鍵的一步——正確安裝 JDK(Java Development Kit)并配置好環(huán)境變量。
本文將帶你從零開始,在主流 Linux 發(fā)行版(如 Ubuntu、CentOS、Debian 等)上完成 JDK 的安裝與環(huán)境變量配置,并通過實(shí)際的 Java 代碼示例驗(yàn)證安裝是否成功。我們將涵蓋多種安裝方式(包括包管理器安裝、手動(dòng)下載安裝、使用 SDKMAN! 等),深入講解環(huán)境變量的作用機(jī)制,分析常見問題,并提供最佳實(shí)踐建議。無論你是剛?cè)腴T的開發(fā)者,還是需要部署生產(chǎn)環(huán)境的運(yùn)維工程師,本文都將為你提供清晰、可靠、可復(fù)現(xiàn)的操作指南。
為什么需要正確安裝 JDK?
JDK 不僅僅是 Java 編譯器(javac)和運(yùn)行時(shí)(JRE)的集合,它還包含調(diào)試工具、文檔生成器(javadoc)、性能監(jiān)控工具(如 jconsole、jvisualvm)等開發(fā)必備組件。在 Linux 系統(tǒng)中,若未正確安裝 JDK 或環(huán)境變量配置錯(cuò)誤,你可能會(huì)遇到以下問題:
- 執(zhí)行
java或javac命令時(shí)提示 “command not found” - 構(gòu)建工具(如 Maven、Gradle)無法識(shí)別 Java 版本
- 應(yīng)用程序啟動(dòng)失敗,報(bào)錯(cuò) “No Java runtime present”
- 多個(gè) Java 版本共存時(shí),系統(tǒng)調(diào)用的是錯(cuò)誤版本
因此,理解 JDK 的安裝原理和環(huán)境變量的配置邏輯,是保障 Java 應(yīng)用穩(wěn)定運(yùn)行的基礎(chǔ)。
Linux 系統(tǒng)中常見的 JDK 發(fā)行版
在安裝之前,我們需要了解目前主流的 JDK 發(fā)行版。Oracle JDK 曾是官方標(biāo)準(zhǔn),但自 Java 11 起,Oracle 改變了其許可策略,對(duì)商業(yè)用途收取費(fèi)用。因此,社區(qū)和企業(yè)越來越多地轉(zhuǎn)向開源且免費(fèi)的替代品:
- OpenJDK:由 OpenJDK 社區(qū)維護(hù),是 Java SE 的官方開源實(shí)現(xiàn)。大多數(shù) Linux 發(fā)行版默認(rèn)提供 OpenJDK。
- Adoptium (Eclipse Temurin):由 Eclipse 基金會(huì)支持,提供經(jīng)過嚴(yán)格測(cè)試的 OpenJDK 構(gòu)建,被廣泛用于生產(chǎn)環(huán)境。
- Amazon Corretto:AWS 提供的 OpenJDK 發(fā)行版,長(zhǎng)期支持且免費(fèi)。
- Azul Zulu:Azul Systems 提供的 OpenJDK 構(gòu)建,支持多種平臺(tái)。
- Microsoft Build of OpenJDK:微軟提供的 OpenJDK 構(gòu)建,適用于 Azure 和其他云環(huán)境。
?? 建議:對(duì)于大多數(shù)用戶,推薦使用 OpenJDK 或 Eclipse Temurin,它們完全開源、免費(fèi),且兼容性良好。
你可以通過 Adoptium 官網(wǎng) 獲取 Temurin 的最新版本,或通過 OpenJDK 官網(wǎng) 了解官方信息。
方法一:使用系統(tǒng)包管理器安裝 OpenJDK(推薦初學(xué)者)
這是最簡(jiǎn)單、最安全的方式,尤其適合快速搭建開發(fā)或測(cè)試環(huán)境。不同發(fā)行版的包管理器命令略有不同。
在 Ubuntu/Debian 系統(tǒng)上
# 更新軟件包列表 sudo apt update # 查看可用的 OpenJDK 版本 apt list openjdk* # 安裝 OpenJDK 17(當(dāng)前 LTS 版本) sudo apt install openjdk-17-jdk -y # 驗(yàn)證安裝 java -version javac -version
執(zhí)行 java -version 后,你可能會(huì)看到類似輸出:
openjdk version "17.0.12" 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-122.04.1, mixed mode, sharing)
在 CentOS/RHEL/Rocky Linux 系統(tǒng)上
# 對(duì)于 CentOS 7(使用 yum) sudo yum install java-17-openjdk-devel -y # 對(duì)于 CentOS 8+/Rocky Linux(使用 dnf) sudo dnf install java-17-openjdk-devel -y # 驗(yàn)證 java -version
?? 注意:
-devel后綴表示包含開發(fā)工具(如javac),僅安裝java-17-openjdk只會(huì)安裝 JRE,無法編譯 Java 代碼。
方法二:手動(dòng)下載并安裝 JDK(適用于生產(chǎn)環(huán)境或特定版本需求)
當(dāng)你需要安裝特定版本(如 Oracle JDK、Temurin、Corretto)或系統(tǒng)包管理器未提供所需版本時(shí),手動(dòng)安裝是更好的選擇。
步驟 1:下載 JDK 壓縮包
以 Eclipse Temurin JDK 17 為例:
# 進(jìn)入臨時(shí)目錄 cd /tmp # 使用 wget 下載(以 x64 Linux 為例) wget https://github.com/adoptium/temurin17-binaries/releases/latest/download/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz
?? 你可以從 Adoptium Releases 頁(yè)面 選擇適合你架構(gòu)的版本。
步驟 2:解壓到指定目錄
通常將 JDK 安裝到 /usr/lib/jvm/ 目錄下(這是 Linux 系統(tǒng)約定的 Java 安裝位置):
# 創(chuàng)建 jvm 目錄(如果不存在) sudo mkdir -p /usr/lib/jvm # 解壓 sudo tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz -C /usr/lib/jvm/ # 重命名目錄以便引用(可選但推薦) sudo mv /usr/lib/jvm/jdk-17.0.12+7 /usr/lib/jvm/temurin-17
步驟 3:配置環(huán)境變量
這是關(guān)鍵一步!我們需要設(shè)置 JAVA_HOME 并將 JDK 的 bin 目錄加入 PATH。
編輯全局環(huán)境變量文件(對(duì)所有用戶生效):
sudo nano /etc/environment
在文件末尾添加:
JAVA_HOME="/usr/lib/jvm/temurin-17"
然后編輯 /etc/profile 或創(chuàng)建一個(gè)專用的 profile 文件:
sudo nano /etc/profile.d/java.sh
寫入以下內(nèi)容:
export JAVA_HOME=/usr/lib/jvm/temurin-17 export PATH=$JAVA_HOME/bin:$PATH
保存后,使配置生效:
source /etc/profile
或者,如果你只想為當(dāng)前用戶配置,可以編輯 ~/.bashrc 或 ~/.zshrc:
echo 'export JAVA_HOME=/usr/lib/jvm/temurin-17' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc
驗(yàn)證安裝
echo $JAVA_HOME # 應(yīng)輸出:/usr/lib/jvm/temurin-17 java -version javac -version
如果一切正常,說明手動(dòng)安裝成功!
方法三:使用 SDKMAN! 管理多個(gè) JDK 版本(開發(fā)者利器)
如果你經(jīng)常需要在不同 Java 版本之間切換(例如同時(shí)開發(fā) Java 8 和 Java 21 項(xiàng)目),SDKMAN! 是一個(gè)極佳的工具。它是一個(gè)命令行工具,用于管理 Java、Groovy、Kotlin 等 SDK 的多個(gè)版本。
安裝 SDKMAN!
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
使用 SDKMAN! 安裝 JDK
# 列出可用的 Java 版本 sdk list java # 安裝 Temurin JDK 17 sdk install java 17-tem # 安裝 OpenJDK 21 sdk install java 21-open # 設(shè)置默認(rèn)版本 sdk default java 17-tem # 臨時(shí)切換版本(僅當(dāng)前 shell 會(huì)話) sdk use java 21-open
SDKMAN! 會(huì)自動(dòng)配置 JAVA_HOME 和 PATH,無需手動(dòng)編輯配置文件。這對(duì)于多版本開發(fā)場(chǎng)景非常友好。
?? 了解更多:SDKMAN! 官網(wǎng)
環(huán)境變量詳解:JAVA_HOME 與 PATH
很多初學(xué)者對(duì) JAVA_HOME 和 PATH 的作用感到困惑。下面詳細(xì)解釋:
PATH 是什么?
PATH 是一個(gè)環(huán)境變量,包含一系列目錄路徑。當(dāng)你在終端輸入一個(gè)命令(如 java),系統(tǒng)會(huì)依次在 PATH 中列出的目錄中查找對(duì)應(yīng)的可執(zhí)行文件。
例如,PATH 可能包含:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果你將 $JAVA_HOME/bin 加入 PATH,那么 java 和 javac 就能在任何目錄下被調(diào)用。
JAVA_HOME 是什么?
JAVA_HOME 并不是系統(tǒng)必需的變量,但它被大量 Java 工具和框架依賴,例如:
- Apache Tomcat
- Maven
- Gradle
- Spring Boot
- Jenkins
這些工具通過讀取 JAVA_HOME 來確定 JDK 的安裝位置,從而調(diào)用正確的 java 或 javac。如果沒有設(shè)置 JAVA_HOME,它們可能無法啟動(dòng)或使用錯(cuò)誤的 Java 版本。
驗(yàn)證環(huán)境變量是否生效
# 查看 JAVA_HOME echo $JAVA_HOME # 查看 java 命令的實(shí)際路徑 which java # 查看 javac 命令的實(shí)際路徑 which javac
理想情況下,which java 應(yīng)返回 $JAVA_HOME/bin/java。
編寫并運(yùn)行第一個(gè) Java 程序
現(xiàn)在 JDK 已安裝并配置完畢,讓我們編寫一個(gè)簡(jiǎn)單的 Java 程序來驗(yàn)證一切正常。
創(chuàng)建 Java 源文件
nano HelloWorld.java
寫入以下代碼:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("?? Hello, Linux Java World!");
System.out.println("Java version: " + System.getProperty("java.version"));
System.out.println("Java home: " + System.getProperty("java.home"));
System.out.println("OS: " + System.getProperty("os.name") + " " + System.getProperty("os.version"));
}
}編譯并運(yùn)行
# 編譯 javac HelloWorld.java # 運(yùn)行 java HelloWorld
預(yù)期輸出:
?? Hello, Linux Java World!
Java version: 17.0.12
Java home: /usr/lib/jvm/temurin-17
OS: Linux 5.15.0-101-generic
? 成功!這表明你的 JDK 安裝和環(huán)境變量配置完全正確。
多 JDK 版本共存與切換
在實(shí)際工作中,你可能需要同時(shí)維護(hù)多個(gè) Java 項(xiàng)目,分別基于 Java 8、11、17 或 21。如何優(yōu)雅地管理多個(gè) JDK?
方案 1:使用update-alternatives(Debian/Ubuntu)
Linux 提供了 update-alternatives 工具來管理同一命令的多個(gè)實(shí)現(xiàn)。
假設(shè)你已安裝了 OpenJDK 11 和 OpenJDK 17:
# 注冊(cè) java 命令的多個(gè)版本 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-17/bin/java 2 # 注冊(cè) javac sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-17/bin/javac 2 # 交互式選擇默認(rèn)版本 sudo update-alternatives --config java sudo update-alternatives --config javac
系統(tǒng)會(huì)列出所有注冊(cè)的版本,你可以通過數(shù)字選擇默認(rèn)版本。
方案 2:使用 SDKMAN!(推薦)
如前所述,SDKMAN! 提供了更簡(jiǎn)潔的版本切換體驗(yàn):
sdk use java 11-open # 臨時(shí)切換 sdk default java 17-tem # 永久默認(rèn)
方案 3:項(xiàng)目級(jí)配置(Maven/Gradle)
現(xiàn)代構(gòu)建工具允許你在項(xiàng)目級(jí)別指定 Java 版本,而不依賴系統(tǒng)全局設(shè)置。
Maven 示例(pom.xml)
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
</properties>Gradle 示例(build.gradle)
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}這樣,即使系統(tǒng)默認(rèn)是 Java 11,Maven/Gradle 也會(huì)使用指定的 JDK 17 來編譯項(xiàng)目。
常見問題排查
問題 1:java: command not found
原因:PATH 未包含 JDK 的 bin 目錄。
解決:
- 檢查
echo $PATH是否包含$JAVA_HOME/bin - 確認(rèn)
JAVA_HOME是否正確設(shè)置 - 重新加載配置文件:
source ~/.bashrc或source /etc/profile
問題 2:JAVA_HOME is not set
原因:某些工具(如 Tomcat)啟動(dòng)腳本檢測(cè)不到 JAVA_HOME。
解決:
- 在啟動(dòng)腳本中顯式設(shè)置
JAVA_HOME,或 - 確保
JAVA_HOME在全局環(huán)境變量中定義(如/etc/environment)
問題 3:版本不匹配
執(zhí)行 java -version 顯示的是舊版本,但你已安裝新版本。
原因:PATH 中舊版本的路徑排在前面。
解決:
- 使用
which java查看實(shí)際調(diào)用的路徑 - 調(diào)整
PATH順序,確保新 JDK 的bin目錄優(yōu)先 - 使用
update-alternatives或 SDKMAN! 統(tǒng)一管理
問題 4:權(quán)限問題
解壓 JDK 到 /usr/lib/jvm/ 時(shí)提示權(quán)限不足。
解決:使用 sudo 執(zhí)行解壓命令,或選擇用戶目錄(如 ~/jdk)安裝。
生產(chǎn)環(huán)境最佳實(shí)踐
在生產(chǎn)服務(wù)器上部署 Java 應(yīng)用時(shí),應(yīng)遵循以下原則:
- 使用 LTS 版本:Java 8、11、17、21 是長(zhǎng)期支持版本,適合生產(chǎn)環(huán)境。
- 避免使用 Oracle JDK(除非有商業(yè)許可):優(yōu)先選擇 OpenJDK 或 Temurin。
- 固定 JDK 版本:不要使用 “latest” 鏈接,應(yīng)指定具體版本號(hào),確保可重現(xiàn)性。
- 最小化安裝:只安裝
jre(如果不需要編譯),減少攻擊面。 - 定期更新:關(guān)注安全補(bǔ)丁,及時(shí)升級(jí) JDK。
- 使用容器化:通過 Docker 封裝 JDK 和應(yīng)用,避免環(huán)境差異。
例如,一個(gè)典型的生產(chǎn) Dockerfile:
FROM eclipse-temurin:17-jre COPY myapp.jar /app/myapp.jar CMD ["java", "-jar", "/app/myapp.jar"]
這樣,JDK 的安裝和配置被封裝在鏡像中,無需在宿主機(jī)上操作。
環(huán)境變量配置流程圖
為了更直觀地理解 JDK 安裝后的環(huán)境變量配置邏輯,我們用 Mermaid 繪制一個(gè)流程圖:


該流程圖展示了從安裝到驗(yàn)證的完整路徑,幫助你快速定位問題所在。
自動(dòng)化腳本示例
為了簡(jiǎn)化重復(fù)部署,你可以編寫一個(gè) Shell 腳本來自動(dòng)安裝和配置 JDK。
#!/bin/bash
# install-jdk.sh - 自動(dòng)安裝 OpenJDK 17 并配置環(huán)境變量
set -e # 遇錯(cuò)退出
echo "?? 開始安裝 OpenJDK 17..."
# 檢測(cè)發(fā)行版
if command -v apt &> /dev/null; then
echo "?? 使用 apt 安裝..."
sudo apt update
sudo apt install -y openjdk-17-jdk
elif command -v dnf &> /dev/null; then
echo "?? 使用 dnf 安裝..."
sudo dnf install -y java-17-openjdk-devel
elif command -v yum &> /dev/null; then
echo "?? 使用 yum 安裝..."
sudo yum install -y java-17-openjdk-devel
else
echo "? 不支持的包管理器"
exit 1
fi
# 獲取 JAVA_HOME 路徑(適用于 Ubuntu/Debian)
if [ -d "/usr/lib/jvm/java-17-openjdk-amd64" ]; then
JAVA_HOME_PATH="/usr/lib/jvm/java-17-openjdk-amd64"
elif [ -d "/usr/lib/jvm/java-17-openjdk" ]; then
JAVA_HOME_PATH="/usr/lib/jvm/java-17-openjdk"
else
echo "?? 無法自動(dòng)確定 JAVA_HOME,嘗試手動(dòng)設(shè)置"
exit 1
fi
# 寫入環(huán)境變量
echo "export JAVA_HOME=$JAVA_HOME_PATH" >> ~/.bashrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
# 重新加載
source ~/.bashrc
echo "? OpenJDK 17 安裝完成!"
java -version將上述腳本保存為 install-jdk.sh,賦予執(zhí)行權(quán)限后運(yùn)行:
chmod +x install-jdk.sh ./install-jdk.sh
總結(jié)
在 Linux 系統(tǒng)上安裝 JDK 并配置環(huán)境變量,看似簡(jiǎn)單,實(shí)則涉及操作系統(tǒng)、環(huán)境變量、軟件包管理等多個(gè)層面的知識(shí)。通過本文,你已經(jīng)掌握了:
- 三種主流 JDK 安裝方式(包管理器、手動(dòng)、SDKMAN!)
JAVA_HOME與PATH的作用與配置方法- 多版本 JDK 的管理與切換策略
- 常見問題的排查思路
- 生產(chǎn)環(huán)境的最佳實(shí)踐
無論你是開發(fā)本地應(yīng)用,還是部署云端服務(wù),正確的 JDK 安裝都是堅(jiān)實(shí)的第一步。記住,自動(dòng)化、版本固定、使用 LTS 版本,是保障系統(tǒng)穩(wěn)定的關(guān)鍵。
最后,別忘了運(yùn)行你的 HelloWorld.java,看到那個(gè) ?? 表情時(shí),你就知道——你已經(jīng)成功踏入了 Linux + Java 的世界!
?? 延伸閱讀:
到此這篇關(guān)于Java 部署Linux 系統(tǒng)安裝JDK與環(huán)境變量配置的文章就介紹到這了,更多相關(guān)java部署linux安裝jdk內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 使用JDBC構(gòu)建簡(jiǎn)單的數(shù)據(jù)訪問層實(shí)例詳解
以下是如何使用JDBC構(gòu)建一個(gè)數(shù)據(jù)訪問層,包括數(shù)據(jù)轉(zhuǎn)換(將從數(shù)據(jù)庫(kù)中查詢的數(shù)據(jù)封裝到對(duì)應(yīng)的對(duì)象中……),數(shù)據(jù)庫(kù)的建立,以及如何連接到數(shù)據(jù)庫(kù),需要的朋友可以參考下2016-11-11
Mybatis實(shí)現(xiàn)動(dòng)態(tài)排序方式
這篇文章主要介紹了Mybatis實(shí)現(xiàn)動(dòng)態(tài)排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù)
這篇文章主要介紹了Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù),重點(diǎn)介紹如何使用函數(shù)式編程模型創(chuàng)建響應(yīng)式 RESTful 服務(wù),這種編程模型與傳統(tǒng)的基于 Spring MVC 構(gòu)建 RESTful 服務(wù)的方法有較大差別,感興趣的朋友跟隨小編一起看看吧2023-08-08
Spring MVC 中獲取session的幾種方法(小結(jié))
這篇文章主要介紹了Spring MVC 中獲取session的幾種方法(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Java中的CGLIB動(dòng)態(tài)代理的使用及原理詳解
這篇文章主要介紹了Java中的CGLIB動(dòng)態(tài)代理的使用及原理詳解,CGLIB是一個(gè)功能強(qiáng)大,高性能的代碼生成包,它為沒有實(shí)現(xiàn)接口的類提供代理,為JDK的動(dòng)態(tài)代理提供了很好的補(bǔ)充,需要的朋友可以參考下2023-09-09
Spring事務(wù)傳播行為從原理到實(shí)戰(zhàn)完全指南
Spring事務(wù)傳播行為是企業(yè)級(jí)應(yīng)用開發(fā)中的高級(jí)特性,正確理解和使用各種傳播行為是架構(gòu)師和高級(jí)開發(fā)者的必備技能,本文通過理論結(jié)合實(shí)踐的方式,系統(tǒng)性地剖析了七大傳播行為的特點(diǎn)、適用場(chǎng)景和最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧2025-12-12
Springboot實(shí)現(xiàn)緩存預(yù)熱的方法
在系統(tǒng)啟動(dòng)之前通過預(yù)先將常用數(shù)據(jù)加載到緩存中,以提高緩存命中率和系統(tǒng)性能的過程,緩存預(yù)熱的目的是盡可能地避免緩存擊穿和緩存雪崩,這篇文章主要介紹了Springboot實(shí)現(xiàn)緩存預(yù)熱,需要的朋友可以參考下2024-03-03

