1. 程式人生 > >java9啟動tomcat9閃退

java9啟動tomcat9閃退

最近由於Java開發環境由eclipse換成idea,發現了一些很奇特的問題。遂寫下來和大家分享下。

開發使用環境為(64位版)idea2017.3月版本+jdk9+tomcat9,發現之前配置好的tomcat不能使用了。

先說方法:將jdk從版本9更換為jdk8。如果有興趣接著往下看即可。

排錯過程如下:

之前eclipse使用的是32為的tomcat7,先將tomcat7換成64位後發現tomcat還不能正常使用,於是將tomcat更換成最新版本tomcat9。發現使用cmd命令啟動tomcat安裝目錄/bin/startup.bat還是無法啟動tomcat。

可以右鍵點選startup.bat,編輯,在文字的最後敲上pause

,儲存後重新執行startup.bat,這時候視窗不會再一閃而過,而是停留在桌面上(除錯成功,把pause去掉即可)。


再次開啟startup.bat檔案會出現如下資訊。


首先排除如下問題:tomcat的環境變數配置問題。結論:tomcat的環境變數在執行的時候就自動配上了。(原因在最後)。

接著考慮如下問題:埠問題(由於沒有報錯,所以這裡不寫,僅作提醒)、環境變數中path,Java的環境變數是不是放在最前面。另外可以在startup.bat檔案的第一行後面新增一句話:set JAVA_HOME=[jdk安裝目錄]D("[ ]"去掉)。如圖


再次使用cmd命令啟動startup.bat檔案後會出現很多資訊,如圖


之後在瀏覽器漲輸入“http://localhost:8080/”發現還是不能啟動tomcat伺服器。

考慮如下問題:由於沒有報錯,是否是已經啟動,卻將tomcat服務關閉掉(由於這裡沒有出現類似問題,僅作提醒用)、或者是tomcat服務已經啟動了,但是卻沒有正常啟動、或者是之前配置有問題(已經排除)。這裡重點考慮是否是沒有正常啟動,於是嘗試使用cmd命令結束tomcat服務。在cmd命令介面中進入tomcat的bin目錄,啟動shutdown.bat檔案,發現報錯,欣喜若狂。因為終於報錯了。如圖


發現是一個很簡單的Java虛擬機器的引數錯誤,於是按照傳統方法更改之後(這裡放一個傳送門:虛擬機器引數錯誤),再次使用shutdown.bat命令發現問題依然存在。發現問題沒有那麼簡單。經過一番科學搜尋之後,終於在Oracle官網找到了答案。(傳送門:

Oracle官網說明)如圖


chrome翻譯如下:


所以,我們嘗試將jdk版本從jdk9更換到jdk8中,啟動tomcat服務。


ok大功告成,撒花。旁邊的人拍了拍我的肩膀,上午幹啥了,答曰:在啟動tomcat服務

************分割線************

一、其實在idea中我們可以不用配置tomcat服務也可以正常進行Java Web開發,但是在配置JRebel for IntellIj之後會出現一個 錯似曾相識的錯誤,如圖:


那麼,我們配置完tomcat之後可以啟動了嗎?

答案是不能!如圖:


還是會出現:JRebel-JVMTI [ERROR] Process finished with exit code 1,

開啟日誌發現。Application Server was not connected before run configuration stop, reason:

Unable to ping server at localhost:1099

解決思路是:JRE_HOME沒有配置,或編譯器使用的jre版本是不正確的。還是同樣的思路,我們在配置完JRE_HOME變數後,一定要配置一遍jre版本。如圖

run-->Edit Configurations 選擇jre版本為8的。完美解決,如圖。


二、解釋下為什麼配置tomcat的時候不用配置tomcat的環境變數,結論:

1、判斷CATALINA_HOME是否為空,為空則把當前目錄設為CATALINA_HOME的值;

2、再判斷catalina.bat是否存在,不存在則把當前目錄設為CATALINA_HOME的值;

3、再判斷環境變數下的catalina.bat是否存在,存在則呼叫bin目錄下的“catalina.bat start”命令~

我們找到startup.bat檔案,滑鼠右鍵點選編輯,看到裡面的內容:

rem Guess CATALINA_HOME if not defined		//為註釋程式碼:判斷 CATALINA_HOME 環境變數是否已經配置
set "CURRENT_DIR=%cd%"				//設定CURRENT_DIR 變數(當前工作目錄)為:D:\Code\tomcat9\bin 
if not "%CATALINA_HOME%" == "" goto gotHome	//如果配置了 CATALINA_HOME 環境變數跳轉執行 gotHome
set "CATALINA_HOME=%CURRENT_DIR%"          	 //如果沒有設定,則設定 CATALINA_HOME 變數為:D:\Code\tomcat9\bin 
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome //檢視"當前工作目錄\bin" 目錄(即D:\Code\tomcat9\bin)下是否存在catalina.bat 檔案,如存在跳轉okHome
cd ..					//回到上級子目錄,即:D:\Code\tomcat9 ,此時當前工作目錄已經更改為:D:\Code\tomcat9
set "CATALINA_HOME=%cd%" 		// 更改 CATALINA_HOME 變數值為:D:\Code\tomcat9\bin    
cd "%CURRENT_DIR%"			//切換至當前工作目錄:D:\Code\tomcat9

最後,我用一句話來鼓勵你我,這群在路上前進的人:“所有的偉大,源於一個勇敢的開始”。

打完收工,有問題歡迎留言。轉載要徵得同意哦。