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

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

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

前言

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

第一步:標(biāo)準(zhǔn)化目錄結(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啟動(dòng)/停止腳本目錄
├─ conf/               # 配置文件
├─ webapps/            # 項(xiàng)目部署目錄
├─ jdk/                # 新建的JDK存放目錄
│  └─ jdk1.8.0_391/    # 解壓后的JDK完整目錄(含bin、jre、lib等子文件夾)
├─ logs/               # 日志
└─ temp/               # 臨時(shí)文件

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

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

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

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

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

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

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

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

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

第三步:測(cè)試啟動(dòng),驗(yàn)證JDK配置

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

Windows

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

cd TOMCAT_HOME/bin
startup.bat

啟動(dòng)窗口會(huì)顯示JVM版本,且日志中會(huì)標(biāo)注使用的JDK路徑為T(mén)omcat下的專(zhuān)屬JDK。

Linux/Mac

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

cd TOMCAT_HOME/bin
./startup.sh

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

# 查看啟動(dòng)日志,搜索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)鍵避坑點(diǎn)

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

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

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

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

總結(jié)

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

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

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

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

一、setclasspath.sh 核心作用(Tomcat原生,無(wú)需改動(dòng))

這個(gè)文件是Tomcat官方寫(xiě)的JDK路徑檢測(cè)腳本,核心邏輯只有2點(diǎn):

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

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

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

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

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

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

三、補(bǔ)充:利用setclasspath.sh驗(yàn)證JDK配置(可選)

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

Linux/Mac執(zhí)行命令

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

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

cd CATALINA_HOME\bin
setclasspath.bat

同理,無(wú)報(bào)錯(cuò)即成功,報(bào)錯(cuò)則檢查setenv.bat的路徑。

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

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

總結(jié)

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

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

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

相關(guān)文章

  • 淺析SpringBoot中的過(guò)濾器和攔截器

    淺析SpringBoot中的過(guò)濾器和攔截器

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

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

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

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

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

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

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

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

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

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

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

    java.lang.IllegalStateException異常解決

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

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

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

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

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

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

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

最新評(píng)論

双桥区| 临西县| 滨州市| 赤城县| 无锡市| 禹州市| 田东县| 沁源县| 丽水市| 长葛市| 新昌县| 左云县| 开阳县| 临桂县| 鄄城县| 长兴县| 福海县| 江孜县| 禹城市| 太和县| 循化| 洮南市| 漠河县| 宾川县| 阳信县| 靖江市| 岳池县| 正定县| 尉氏县| 抚宁县| 来宾市| 台北市| 松江区| 邓州市| 始兴县| 罗甸县| 乐东| 高尔夫| 从化市| 潼南县| 大足县|