Tomcat 啟動腳本會讀取 JAVA_HOME 與 JRE_HOME 環境變數決定使用哪個 JDK。若伺服器安裝多個 JDK,或不想污染系統環境變數,可直接修改 Tomcat bin 目錄下的啟動腳本,指定專屬 JDK 路徑。本文提供 Windows 與 Linux 兩種作業系統的完整操作步驟與原理解析。
startup.bat/sh 呼叫 catalina.bat/sh。catalina.bat/sh 呼叫 setclasspath.bat/sh 解析 JAVA_HOME/JRE_HOME。setclasspath.bat/sh 開頭硬編碼這兩個變數,即可鎖定 Tomcat 使用的 JDK,且不需設定系統環境變數。D:\apache-tomcat-9.0。bin\setclasspath.bat,在檔案最頂端(第一行有效指令前)新增:set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_202 set JRE_HOME=D:\Program Files\Java\jdk1.8.0_202\jre
startup.bat 啟動,Tomcat 將使用指定 JDK。/opt/apache-tomcat-9.0。bin/setclasspath.sh,在檔案最頂端(shebang 之後)新增:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
chmod +x bin/*.sh。./bin/startup.sh。同樣可在 catalina.bat 或 catalina.sh 開頭設定 JAVA_HOME,效果相同。但 setclasspath 是專門解析 JDK 路徑的腳本,修改此處語意更清晰,且不影響 catalina 其他邏輯。
logs/catalina.out(Linux)或主控台輸出(Windows)。Java Home 或 JVM Version 關鍵字,確認是否為預期版本。/manager/status 中查看 JVM 詳細資訊。| 現象 | 原因 | 解決 |
|---|---|---|
啟動報錯 JAVA_HOME not found | 路徑拼寫錯誤、JDK 未安裝、權限不足 | 檢查路徑大小寫、確認 JDK 存在、Linux 檢查執行權限 |
| 版本仍為系統預設 | 修改檔案位置錯誤、未重啟 Tomcat | 確認編輯的是 setclasspath 且在最頂端、完全重啟 |
| Linux 執行腳本無反應 | 換行符為 CRLF | sed -i 's/\r$//' bin/setclasspath.sh 轉換為 LF |
JAVA_HOME 系統環境變數統一管理,便於升級與巡檢。CATALINA_BASE 實現多實例部署,每實例可獨立指定 JDK。