適用於主流 Linux 發行版(CentOS、Ubuntu、Debian、RHEL、Fedora 等),示範以 .bin 自解壓縮安裝包 方式手動部署 JDK,適合伺服器環境或需精確控制版本的場景。
/usr/java/)/etc/profile.d/java.sh)# 範例:JDK 1.5.0_04 (舊版本示範,實務請下載 LTS 版如 8, 11, 17, 21)
wget https://download.oracle.com/otn-pub/java/jdk/1.5.0_04/jdk-1_5_0_04-linux-i586.bin
# 現代版本需至 Oracle 官網或採用 OpenJDK:https://jdk.java.net/
chmod +x jdk-1_5_0_04-linux-i586.bin
./jdk-1_5_0_04-linux-i586.bin
# 會在當前目錄產生 jdk1.5.0_04/ 目錄
mkdir -p /usr/java
mv jdk1.5.0_04 /usr/java/
# 建議建立軟連結方便切換版本
ln -s /usr/java/jdk1.5.0_04 /usr/java/default
cat > /etc/profile.d/java.sh <<'EOF'
# JDK 環境變數配置
export JAVA_HOME=/usr/java/default
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
EOF
# 立即生效
source /etc/profile.d/java.sh
注意:
JAVA_HOME必須指向 JDK 根目錄(含 bin、lib 子目錄),而非 bin 目錄本身。CLASSPATH現代專案通常由建構工具管理,系統級設定僅為相容舊專案。
java -version
# 預期輸出:
# java version "1.5.0_04"
# Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05)
# Java HotSpot(TM) Client VM (build 1.5.0_04-b05, mixed mode, sharing)
javac -version
# 輸出:javac 1.5.0_04
# Ubuntu / Debian
apt update && apt install openjdk-17-jdk-headless
# CentOS / RHEL / Fedora
dnf install java-17-openjdk-devel
# Arch Linux
pacman -S jdk17-openjdk
套件管理器會自動處理環境變數、替代連結(update-alternatives)與安全性更新。
# 查看已安裝版本
update-alternatives --config java
update-alternatives --config javac
# 手動註冊自行下載的 JDK
update-alternatives --install /usr/bin/java java /usr/java/jdk-17/bin/java 100
update-alternatives --install /usr/bin/javac javac /usr/java/jdk-17/bin/javac 100
# Dockerfile 範例
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY . .
RUN ./mvnw package -DskipTests
ENTRYPOINT ["java","-jar","target/app.jar"]
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
java: command not found | PATH 未生效或 JAVA_HOME 錯誤 | 重新 source /etc/profile 或重新登入;檢查 echo $JAVA_HOME |
| 版本不符預期 | 多版本共存、軟連結指向錯誤 | 用 update-alternatives 切換或修正 JAVA_HOME |
| 權限被拒 | 目錄權限不足 | chmod -R 755 /usr/java/;確認執行檔有 x 權限 |
| SSL/憑證錯誤 | 舊版 JDK 憑證過期 | 升級至支援中的 LTS 版本(8/11/17/21) |
一言以蔽之:手動部署掌握核心原理,生產環境優先用套件管理器或容器化,版本鎖定在 LTS,環境變數集中管理於 /etc/profile.d/。