Tomcat Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger


發生緣由

  • 學習Tomcat軟件的使用

環境

  • Tomcat版本:8.5.75
  • jdk版本:jdk-16.0.2
  • 電腦系統:win10

問題及補救

啟動Tomcat

  • 問題

    我的系統是win10,所以打開Tomcat需要啟動bin目錄下面startup.bat文件。可是雙擊startup.bat文件,發現會閃退。

  • 搜索

    通過搜索引擎搜索發現:這種情況的發生是因為沒有正確的配置JAVA環境變量。

  • 結果

    可是我之前已經配置好了。使用cmd命令窗口分別輸入下面命令:javajavacjava -version都沒有任何問題。

下載jre

  • 搜索

    通過搜索引擎搜索發現:查找到了jre的影子。原來自從jdk11版本開始后,下載jdk已經不會自帶jre了,所以需要自行下載。果然,打開下載的jdk-16.0.2,里面並沒有jre。

  • 修改

    通過管理員身份打開cmd命令,進入jdk的文件夾,鍵入下面的代碼:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
    然后再配置jre的環境變量,也就是JRE_HOME:E:\JAVA\jdk-16.0.2\jre   Path:%JRE_HOME%\bin

  • 結果

    雙擊打開startup.bat文件依舊是閃退,沒有作用。

修改源碼

  • 搜索

    通過搜索引擎搜索發現:仍然有可能是環境變量配置錯誤。查看源碼可以發現startup.bat–>catalina.bat–>setclasspath.bat,他們之間是層層調用的關系。

  • 修改

    所以我們可以在setclasspath.bat文件下面,聲明環境變量,添加上自己本地jdk、jre路徑。
    右鍵通過記事本打開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路徑) 

  • 結果

    雙擊打開,這次閃退是閃兩下了,依舊打不開。

檢查端口號

  • 搜索

    通過搜索引擎搜索發現:有可能是有其他應用程序占用該端口號

  • 修改

    通過cmd命令查看是否有其他應用程序占用8080端口號

  • 結果

    並沒有軟件占用。

捕捉錯誤信息

  • 搜索

    通過搜索引擎搜索發現:可以通過捕捉查看錯誤信息。

  • 修改
  1. 右鍵startup.bat文件,通過記事本打開,將倒數第三行修改一下。
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%
    # 修改為下面代碼
    call "%EXECUTABLE%" run %CMD_LINE_ARGS%
    

    保存,然后以cmd命令的形式打開startup.bat文件。這時候會在cmd窗口出現

    		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  
  2. 右鍵startup.bat文件,通過記事本打開,在最后一行后面加上一行。鍵入:pause
    保存,然后雙擊打開startup.bat文件。這時候會出現一個新的Tomcat窗口,里面同樣有着報錯信息
    		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環境變量

  • 搜索

    通過搜索引擎搜索Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger發現:jre的問題。

  • 修改

    右鍵通過記事本打開setclasspath.bat文件,然后將之前寫的代碼修改為

     set JAVA_HOME=E:\JAVA\jdk-16.0.2

     set JRE_HOME=E:\JAVA\jdk-16.0.2

  • 結果

    雙擊打開,發現可以成功運行,但是有亂碼問題。

修改亂碼問題

  • 修改

    我們來到conf目錄中,找到一個名為logging.properties的文件,打開這個配置文件,修改如下配置項:
     java.util.logging.ConsoleHandler.encoding = UTF-8

    修改為下面代碼

     java.util.logging.ConsoleHandler.encoding = GBK

    保存后,重啟tomcat!

  • 結果

    恭喜,成功了。

重新修改環境變量

  • 在我寫這篇博客的時候,發現其實是把JAVA環境變量配置錯誤了。
  • 應該為:JAVA_HOME:E:\JAVA\jdk-16.0.2   Path:%JAVA_HOME%\bin
  • 我弄的:JAVA_HOUME:E:\JAVA\jdk-16.0.2   Path:%JAVA_HOUME%\bin
  • 所以導致了錯誤,可是使用cmd命令窗口分別輸入下面命令:javajavacjava -version都沒有任何問題。
  • 修改完了環境變量,將之前在配置文件中寫的代碼刪除:

    set JAVA_HOME=E:\JAVA\jdk-16.0.2

    set JRE_HOME=E:\JAVA\jdk-16.0.2

  • 然后就沒有什么問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM