最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

tomcat9使用指定的JDK版本完整步驟記錄

 更新時間:2026年04月20日 11:03:41   作者:liweiweili126  
在服務(wù)器部署多個JDK版本的場景下,Tomcat默認讀取系統(tǒng)環(huán)境變量可能導(dǎo)致版本沖突,下面這篇文章主要介紹了tomcat9使用指定的JDK版本的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

如果你想把JDK放到Tomcat9的根目錄(CATALINA_HOME)下,通過相對路徑配置專屬JDK環(huán)境(不依賴系統(tǒng)全局JDK,實現(xiàn)Tomcat-JDK一體化),核心是利用Tomcat官方推薦的setenv(setclasspath)腳本配置JAVA_HOME(基于CATALINA_HOME的相對路徑,避免修改原生啟動腳本)。

第一步:標準化目錄結(jié)構(gòu)(關(guān)鍵)

先整理Tomcat9的目錄,將解壓版JDK(綠色版,非安裝版)放到Tomcat根目錄下的jdk子文件夾,結(jié)構(gòu)如下(示例JDK8,Tomcat9推薦JDK8/JDK11,兼容最佳):

apache-tomcat-9.0.XX/  # Tomcat9根目錄(即CATALINA_HOME)
├─ bin/                # Tomcat啟動/停止腳本目錄
├─ conf/               # 配置文件
├─ webapps/            # 項目部署目錄
├─ jdk/                # 新建的JDK存放目錄
│  └─ jdk1.8.0_391/    # 解壓后的JDK完整目錄(含bin、jre、lib等子文件夾)
├─ logs/               # 日志
└─ temp/               # 臨時文件

注意:JDK目錄名可自定義(如jdk11),但后續(xù)配置要對應(yīng),禁止有中文/空格/特殊字符。

第二步:核心配置(分Windows/Linux/Mac,二選一)

Tomcat啟動時會自動加載bin目錄下的setenv.bat(Windows)/setenv.sh(Linux/Mac),這是官方推薦的自定義環(huán)境變量的專屬文件(不會在Tomcat升級時被覆蓋,比直接改catalina.bat/sh更安全),該文件默認不存在,需要手動新建

配置的核心:基于Tomcat內(nèi)置的CATALINA_HOME(已自動指向Tomcat根目錄)寫相對路徑,而非./../(避免啟動目錄不同導(dǎo)致路徑失效)。

場景1:Windows系統(tǒng)(.bat腳本)

  1. 在Tomcat的bin目錄下,新建文本文件,重命名為setenv.bat后綴必須是.bat,無txt后綴);
  2. 編輯setenv.bat,寫入以下內(nèi)容(僅配置JAVA_HOME即可,Tomcat會自動識別JDK內(nèi)的JRE):
@echo off
:: 基于CATALINA_HOME(Tomcat根目錄)配置相對路徑的JAVA_HOME,指向jdk子目錄下的JDK解壓包
set "JAVA_HOME=%CATALINA_HOME%\jdk\jdk1.8.0_391"
:: 可選:設(shè)置JVM運行參數(shù)(如堆內(nèi)存),按需添加
set "JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"

替換jdk1.8.0_391為你實際的JDK目錄名,%CATALINA_HOME%是Tomcat內(nèi)置變量,無需手動定義。

場景2:Linux/Mac系統(tǒng)(.sh腳本)

  1. 在Tomcat的bin目錄下,新建setenv.sh文件:
touch TOMCAT_HOME/bin/setenv.sh
  1. 編輯setenv.sh,寫入以下內(nèi)容(語法與Windows不同,注意空格和引號):
#!/bin/sh
# 基于CATALINA_HOME配置相對路徑的JAVA_HOME
export JAVA_HOME=$CATALINA_HOME/jdk/jdk1.8.0_391
# 可選:JVM運行參數(shù)
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
  1. setenv.sh添加執(zhí)行權(quán)限(Linux/Mac必須,否則Tomcat無法加載):
chmod +x TOMCAT_HOME/bin/setenv.sh

第三步:測試啟動,驗證JDK配置

無需配置系統(tǒng)全局的JAVA_HOME/JRE_HOME,直接用Tomcat原生啟動腳本啟動,會自動加載setenv中的專屬JDK:

Windows

雙擊Tomcatbin目錄下的startup.bat,或在CMD中執(zhí)行:

cd TOMCAT_HOME/bin
startup.bat

啟動窗口會顯示JVM版本,且日志中會標注使用的JDK路徑為Tomcat下的專屬JDK。

Linux/Mac

在終端執(zhí)行啟動腳本:

cd TOMCAT_HOME/bin
./startup.sh

通過Tomcat日志驗證JDK是否生效(核心看Java Home路徑):

# 查看啟動日志,搜索Java Home
grep "Java Home" TOMCAT_HOME/logs/catalina.out

正確輸出示例(路徑指向Tomcat下的JDK):

Java Home:         /opt/apache-tomcat-9.0.90/jdk/jdk1.8.0_391/jre

關(guān)鍵避坑點

  1. JDK必須是解壓版:不能用安裝版JDK(安裝版會寫入系統(tǒng)注冊表,無法通過相對路徑獨立使用),直接從Oracle/OpenJDK官網(wǎng)下載解壓版JDK即可;
  2. 禁止修改原生腳本:不要直接改catalina.bat/sh/startup.bat/sh,這些是Tomcat原生文件,升級時會被覆蓋,setenv是官方預(yù)留的自定義入口;
  3. 無中文/空格路徑:Tomcat根目錄、JDK目錄全程禁止中文、空格、特殊字符(如*、#),否則會報“路徑找不到”錯誤;
  4. 相對路徑基于CATALINA_HOME:不要用./jdk/xxx../jdk/xxx,因為如果在非Tomcat目錄啟動腳本,這類相對路徑會失效,而%CATALINA_HOME%/$CATALINA_HOME是Tomcat內(nèi)置的絕對路徑變量,永遠指向根目錄;
  5. Tomcat9的JDK兼容:最低支持JDK8,推薦JDK8/JDK11,不建議用JDK17+(部分特性兼容不佳)。

第四步:停止Tomcat(原生腳本即可)

無需額外配置,直接用Tomcatbin目錄下的停止腳本,會自動使用同一JDK環(huán)境:

  • Windows:shutdown.bat
  • Linux/Mac:./shutdown.sh

總結(jié)

  1. 核心目錄結(jié)構(gòu):Tomcat根目錄下新建jdk文件夾,放入解壓版JDK,實現(xiàn)一體化;
  2. 專屬配置文件:在bin目錄新建setenv.bat/sh,利用Tomcat內(nèi)置的CATALINA_HOME配置相對路徑的JAVA_HOME,無需系統(tǒng)全局JDK;
  3. 跨目錄啟動無憂:基于CATALINA_HOME的相對路徑,無論在哪個目錄執(zhí)行Tomcat啟動腳本,JDK路徑都不會失效;
  4. 升級友好:setenv文件不會被Tomcat升級覆蓋,后續(xù)換JDK只需修改該文件的JDK目錄名即可。

這種配置方式的優(yōu)勢是Tomcat-JDK一體化,可直接拷貝整個Tomcat目錄到其他同系統(tǒng)服務(wù)器,無需重新配置JDK環(huán)境,直接啟動即可使用。

另外如果你發(fā)現(xiàn)Tomcat9的bin目錄里有setclasspath.sh(Linux/Mac)/setclasspath.bat(Windows),這個文件是Tomcat原生的核心腳本,啟動時會被catalina.sh/bat自動加載,作用是檢測并設(shè)置JDK/JRE的類路徑、驗證JAVA_HOME/JRE_HOME的有效性——這和我們之前配置setenv.sh的方案完全兼容,甚至可以說setclasspath.sh正是我們用setenv.sh配置相對路徑JDK的“底層支撐”,不用修改這個原生文件,繼續(xù)按之前的方法配置即可。

下面給你講清楚這個文件的核心邏輯、和setenv.sh的加載順序,以及為什么絕對不要修改它,同時補充驗證細節(jié),讓你徹底放心配置。

一、setclasspath.sh 核心作用(Tomcat原生,無需改動)

這個文件是Tomcat官方寫的JDK路徑檢測腳本,核心邏輯只有2點:

  1. 優(yōu)先讀取已設(shè)置的JAVA_HOME/JRE_HOME:如果我們在setenv.sh里提前設(shè)置了JAVA_HOME(Tomcat下的專屬JDK),setclasspath.sh會直接復(fù)用這個變量,不會再去檢測系統(tǒng)全局的JDK;
  2. 若未設(shè)置,則自動查找系統(tǒng)JDK:如果沒配JAVA_HOME,它會遍歷系統(tǒng)路徑找jdk/jre,找不到就直接報錯啟動失敗(這也是Tomcat默認需要系統(tǒng)全局JDK的原因)。

簡單說:setclasspath.sh是“JDK路徑檢測器”,而setenv.sh是“JDK路徑配置器”,我們的配置會被檢測器優(yōu)先讀取,完美契合Tomcat的原生啟動邏輯。

二、Tomcat啟動腳本的加載順序(關(guān)鍵,解釋為什么setenv.sh生效)

Tomcat9的啟動腳本執(zhí)行流程是層層加載的,setenv.sh的配置會提前于setclasspath.sh生效,確保JDK路徑被優(yōu)先設(shè)置,順序如下(Linux/Mac為例,Windows邏輯完全一致):

startup.sh → catalina.sh → setenv.sh(自定義,優(yōu)先加載)→ setclasspath.sh(原生,檢測JDK)→ 啟動Tomcat

? 結(jié)論:你之前按我給的方法新建setenv.sh配置相對路徑JAVA_HOME,完全不會和setclasspath.sh沖突,反而會被它優(yōu)先使用,無需對這個原生文件做任何修改(改了會被Tomcat升級覆蓋,還可能導(dǎo)致啟動邏輯出錯)。

三、補充:利用setclasspath.sh驗證JDK配置(可選)

如果想快速驗證setenv.sh里的JAVA_HOME是否被正確讀取,可以直接執(zhí)行setclasspath.sh,它會輸出JDK檢測結(jié)果:

Linux/Mac執(zhí)行命令

# 進入Tomcat的bin目錄
cd CATALINA_HOME/bin
# 執(zhí)行setclasspath.sh(會輸出JDK檢測日志,無報錯即配置成功)
./setclasspath.sh
  • 配置成功:無任何報錯,直接返回命令行;
  • 配置失敗(如JDK目錄寫錯):會明確報錯JAVA_HOME is not defined correctly,提示找不到JDK,此時檢查setenv.sh里的JDK相對路徑即可。

Windows(對應(yīng)setclasspath.bat)

cd CATALINA_HOME\bin
setclasspath.bat

同理,無報錯即成功,報錯則檢查setenv.bat的路徑。

四、再次強調(diào):絕對不要修改setclasspath.sh/bat的3個原因

  1. 原生文件,升級會覆蓋:Tomcat升級時,bin目錄下的原生腳本(包括setclasspath.sh)會被新版本替換,你的修改會全部丟失;
  2. 邏輯復(fù)雜,易改崩:這個文件包含跨平臺的JDK檢測邏輯(兼容不同JDK版本、不同系統(tǒng)),新手修改容易破壞原有邏輯,導(dǎo)致Tomcat無法啟動;
  3. 官方有預(yù)留入口:Tomcat官方明確推薦用setenv.sh/bat做自定義環(huán)境配置,這是專門為用戶預(yù)留的“安全入口”,完全能滿足JDK、JVM參數(shù)的配置需求。

總結(jié)

  1. bin目錄下的setclasspath.sh是Tomcat原生的JDK路徑檢測腳本,無需修改、無需刪除,我們的配置會被它優(yōu)先讀??;
  2. 繼續(xù)按之前的方法在bin目錄新建setenv.sh(Linux/Mac),用$CATALINA_HOME/jdk/你的JDK目錄配置相對路徑JAVA_HOME即可,完全兼容;
  3. Tomcat啟動腳本的加載順序是setenv.sh → setclasspath.sh,確保自定義JDK路徑優(yōu)先生效,實現(xiàn)Tomcat-JDK一體化(無需系統(tǒng)全局JDK);
  4. 可直接執(zhí)行setclasspath.sh快速驗證JDK配置是否正確,無報錯即代表路徑有效。

你現(xiàn)在直接按之前的步驟配置setenv.sh就行,這個原生的setclasspath.sh只會幫你“驗證并使用”配置的JDK,不會有任何沖突~

到此這篇關(guān)于tomcat9使用指定的JDK版本的文章就介紹到這了,更多相關(guān)tomcat9使用指定JDK版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析SpringBoot中的過濾器和攔截器

    淺析SpringBoot中的過濾器和攔截器

    過濾器和攔截器都是為了在請求到達目標處理器(Servlet或Controller)之前或者之后插入自定義的處理邏輯,下面就跟隨小編來看看它們二者的區(qū)別和具體使用吧
    2024-03-03
  • 可觀測性-Metrics-數(shù)據(jù)庫連接池HikariCP監(jiān)控教程

    可觀測性-Metrics-數(shù)據(jù)庫連接池HikariCP監(jiān)控教程

    這篇文章主要介紹了可觀測性-Metrics-數(shù)據(jù)庫連接池HikariCP監(jiān)控教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot響應(yīng)處理實現(xiàn)流程詳解

    SpringBoot響應(yīng)處理實現(xiàn)流程詳解

    這篇文章主要介紹了SpringBoot響應(yīng)處理實現(xiàn)流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • 為什么mybatis中的SqlSession一定要關(guān)閉

    為什么mybatis中的SqlSession一定要關(guān)閉

    這篇文章主要介紹了為什么mybatis中的SqlSession一定要關(guān)閉,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 如何將文件流轉(zhuǎn)換成byte[]數(shù)組

    如何將文件流轉(zhuǎn)換成byte[]數(shù)組

    這篇文章主要介紹了如何將文件流轉(zhuǎn)換成byte[]數(shù)組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • idea創(chuàng)建springboot項目,java版本只能選擇17和21的解決方案

    idea創(chuàng)建springboot項目,java版本只能選擇17和21的解決方案

    這篇文章主要介紹了idea創(chuàng)建springboot項目,java版本只能選擇17和21的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java.lang.IllegalStateException異常解決

    java.lang.IllegalStateException異常解決

    異常是程序在執(zhí)行過程中遇到的錯誤或異常情況,本文就來介紹一下java.lang.IllegalStateException異常解決,感興趣的可以了解一下
    2023-11-11
  • Java 模擬銀行自助終端系統(tǒng)

    Java 模擬銀行自助終端系統(tǒng)

    本系統(tǒng)模擬銀行用戶使用ATM機開戶、查詢、存款、取款功能,要求使用java語言編程實現(xiàn)。這篇文章主要介紹了Java 模擬銀行自助終端系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • javaFX實現(xiàn)五子棋小游戲

    javaFX實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了javaFX實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Spring Data JPA進行數(shù)據(jù)分頁與排序的方法

    Spring Data JPA進行數(shù)據(jù)分頁與排序的方法

    這篇文章主要介紹了Spring Data JPA進行數(shù)據(jù)分頁與排序的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論

南靖县| 富裕县| 长顺县| 海淀区| 鲁山县| 合阳县| 义乌市| 诸暨市| 顺昌县| 涞水县| 镇康县| 玉溪市| 福建省| 镇宁| 德兴市| 吉林市| 思茅市| 建阳市| 昭通市| 资兴市| 保山市| 磴口县| 平陆县| 宜城市| 义马市| 广昌县| 武陟县| 堆龙德庆县| 寿光市| 海南省| 侯马市| 仪陇县| 南部县| 滨海县| 周至县| 偃师市| 缙云县| 永宁县| 平乐县| 旌德县| 崇阳县|