解決Tomcat?Caused?by:?java.lang.ClassNotFoundException:?java.util.logging.Logger的問(wèn)題
發(fā)生緣由
- 學(xué)習(xí)Tomcat軟件的使用
環(huán)境
- Tomcat版本:8.5.75
- jdk版本:jdk-16.0.2
- 電腦系統(tǒng):win10
問(wèn)題及補(bǔ)救
啟動(dòng)Tomcat
- 問(wèn)題
我的系統(tǒng)是win10,所以打開(kāi)Tomcat需要啟動(dòng)bin目錄下面startup.bat文件??墒请p擊startup.bat文件,發(fā)現(xiàn)會(huì)閃退。 - 搜索
通過(guò)搜索引擎搜索發(fā)現(xiàn):這種情況的發(fā)生是因?yàn)闆](méi)有正確的配置JAVA環(huán)境變量。 - 結(jié)果
可是我之前已經(jīng)配置好了。使用cmd命令窗口分別輸入下面命令:java
、javac
、java -version
都沒(méi)有任何問(wèn)題。
下載jre
- 搜索
通過(guò)搜索引擎搜索發(fā)現(xiàn):查找到了jre的影子。原來(lái)自從jdk11版本開(kāi)始后,下載jdk已經(jīng)不會(huì)自帶jre了,所以需要自行下載。果然,打開(kāi)下載的jdk-16.0.2,里面并沒(méi)有jre。 - 修改
通過(guò)管理員身份打開(kāi)cmd命令,進(jìn)入jdk的文件夾。
我這里下載的jdk位置位于E:\JAVA
,因此需要在E:\JAVA\jdk-16.0.2
下面打開(kāi)cmd命令,鍵入下面的代碼:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
。
之后就會(huì)發(fā)現(xiàn)jdk-16.0.2文件夾下面多了一個(gè)jre的文件夾。然后再配置jre的環(huán)境變量,也就是JRE_HOME:E:\JAVA\jdk-16.0.2\jre Path:%JRE_HOME%\bin - 結(jié)果
雙擊打開(kāi)startup.bat文件依舊是閃退,沒(méi)有作用。
修改源碼
搜索
通過(guò)搜索引擎搜索發(fā)現(xiàn):仍然有可能是環(huán)境變量配置錯(cuò)誤。查看源碼可以發(fā)現(xiàn)startup.bat–>catalina.bat–>setclasspath.bat,他們之間是層層調(diào)用的關(guān)系。修改
所以我們可以在setclasspath.bat文件下面,聲明環(huán)境變量,添加上自己本地jdk、jre路徑。
右鍵通過(guò)記事本打開(kāi)setclasspath.bat文件,然后在setclasspath.bat文件代碼最上方輸入
set JAVA_HOME=E:\JAVA\jdk-16.0.2(jdk路徑) set JRE_HOME=E:\JAVA\jdk-16.0.2\jre(jre路徑)
結(jié)果
雙擊打開(kāi),這次閃退是閃兩下了,依舊打不開(kāi)。
檢查端口號(hào)
- 搜索
通過(guò)搜索引擎搜索發(fā)現(xiàn):有可能是有其他應(yīng)用程序占用該端口號(hào) - 修改
通過(guò)cmd命令查看是否有其他應(yīng)用程序占用8080端口號(hào),鍵入netstat -aon|findstr “8080”
。 - 結(jié)果
并沒(méi)有軟件占用。
捕捉錯(cuò)誤信息
搜索
通過(guò)搜索引擎搜索發(fā)現(xiàn):可以通過(guò)捕捉查看錯(cuò)誤信息。修改
下面一共有兩種錯(cuò)誤方法可以捕捉錯(cuò)誤信息,任意選擇一種即可。
右鍵startup.bat文件,通過(guò)記事本打開(kāi),將倒數(shù)第三行修改一下。
call "%EXECUTABLE%" start %CMD_LINE_ARGS% # 修改為下面代碼 call "%EXECUTABLE%" run %CMD_LINE_ARGS%
- 保存,然后以cmd命令的形式打開(kāi)startup.bat文件。這時(shí)候會(huì)在cmd窗口出現(xiàn)
Using CATALINA_BASE: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_HOME: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_TMPDIR: "E:\Tomcat\apache-tomcat-8.5.75\temp" Using JRE_HOME: "E:\JAVA\jdk-16.0.2\jre" Using CLASSPATH: "E:\Tomcat\apache-tomcat-8.5.75\bin\bootstrap.jar;E:\Tomcat\apache-tomcat-8.5.75\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED WARNING: Unknown module: java.rmi specified to --add-opens Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:130) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:153) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:208) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50) Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ... 6 more
- 右鍵startup.bat文件,通過(guò)記事本打開(kāi),在最后一行后面加上一行。鍵入:
pause
。
保存,然后雙擊打開(kāi)startup.bat文件。這時(shí)候會(huì)出現(xiàn)一個(gè)新的Tomcat窗口,里面同樣有著報(bào)錯(cuò)信息
Using CATALINA_BASE: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_HOME: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_TMPDIR: "E:\Tomcat\apache-tomcat-8.5.75\temp" Using JRE_HOME: "E:\JAVA\jdk-16.0.2\jre" Using CLASSPATH: "E:\Tomcat\apache-tomcat-8.5.75\bin\bootstrap.jar;E:\Tomcat\apache-tomcat-8.5.75\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED WARNING: Unknown module: java.rmi specified to --add-opens Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:130) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:153) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:208) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50) Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ... 6 more
修改jre環(huán)境變量
搜索
通過(guò)搜索引擎搜索Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger
發(fā)現(xiàn):jre的問(wèn)題。修改
右鍵通過(guò)記事本打開(kāi)setclasspath.bat文件,然后將之前在修改源碼的步驟里面寫(xiě)的代碼修改為
set JAVA_HOME=E:\JAVA\jdk-16.0.2 set JRE_HOME=E:\JAVA\jdk-16.0.2
結(jié)果
雙擊打開(kāi),發(fā)現(xiàn)可以成功運(yùn)行,但是有亂碼問(wèn)題。
修改亂碼問(wèn)題
修改
我們來(lái)到conf目錄中,找到一個(gè)名為 logging.properties的文件,打開(kāi)這個(gè)配置文件,修改如下配置項(xiàng):
java.util.logging.ConsoleHandler.encoding = UTF-8 # 修改為下面代碼 java.util.logging.ConsoleHandler.encoding = GBK
保存后,重啟tomcat!
結(jié)果
恭喜,成功了。
重新修改環(huán)境變量
在我寫(xiě)這篇博客的時(shí)候,發(fā)現(xiàn)其實(shí)是把JAVA環(huán)境變量配置錯(cuò)誤了。
- 應(yīng)該為:JAVA_HOME:E:\JAVA\jdk-16.0.2 Path:%JAVA_HOME%\bin
- 我弄的:JAVA_HOUME:E:\JAVA\jdk-16.0.2 Path:%JAVA_HOUME%\bin
所以導(dǎo)致了錯(cuò)誤,可是使用cmd命令窗口分別輸入下面命令:java
、javac
、java -version
都沒(méi)有任何問(wèn)題。
修改完了環(huán)境變量,將之前在配置文件中寫(xiě)的代碼刪除:
set JAVA_HOME=E:\JAVA\jdk-16.0.2 set JRE_HOME=E:\JAVA\jdk-16.0.2
然后就沒(méi)有什么問(wèn)題了。
以上就是解決Tomcat Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger的問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于Tomcat Caused java.util.logging.Logger的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Tomcat Native提升Tomcat IO效率的方法詳解
這篇文章主要介紹了使用Tomcat Native提升Tomcat IO效率的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12IDEA 配置Tomcat服務(wù)器和發(fā)布web項(xiàng)目的圖文教程
這篇文章主要介紹了IDEA 配置Tomcat服務(wù)器和發(fā)布web項(xiàng)目的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Tomcat配置HTTPS訪問(wèn)的實(shí)現(xiàn)步驟
本文主要介紹了Tomcat配置HTTPS訪問(wèn)的實(shí)現(xiàn)步驟,在tomcat中存在兩種證書(shū)驗(yàn)證情況單向驗(yàn)證和雙向驗(yàn)證,下面就詳細(xì)的介紹一下這兩種情況的配置,感興趣的可以了解一下2022-07-07Linux 中Tomcat遠(yuǎn)程調(diào)試代碼的實(shí)現(xiàn)方法
這篇文章主要介紹了Tomcat 遠(yuǎn)程調(diào)試代碼的實(shí)現(xiàn)方法的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08一次tomcat自動(dòng)關(guān)閉的bug解決
這篇文章主要給大家介紹了一次關(guān)于tomcat自動(dòng)關(guān)閉的bug的解決過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用tomcat具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08docker安裝Tomcat 404問(wèn)題的解決方案
這篇文章主要介紹了docker安裝Tomcat 404問(wèn)題的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10在tomcat將一個(gè)IP地址綁定多個(gè)域名的方法
這篇文章主要介紹了在tomcat將一個(gè)IP地址綁定多個(gè)域名的方法,方法雖簡(jiǎn)單,但比較實(shí)用,需要的朋友可以參考下2014-09-09關(guān)于Tomcat的服務(wù)器使用及說(shuō)明
這篇文章主要介紹了關(guān)于Tomcat的服務(wù)器使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Jenkins+tomcat自動(dòng)發(fā)布的熱部署/重啟及遇到的問(wèn)題解決辦法(推薦)
這篇文章主要介紹了Jenkins+tomcat自動(dòng)發(fā)布的熱部署/重啟及遇到的問(wèn)題解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07