背景
在學習elasticsearch時為了方便進行數據查詢,使用了head插件
因為elasticsearch版本較高(6.3.0),沒有與版本相符的head插件,將以獨立web項目運行
所以提供了一個tomcat 單獨運行head web項目
在使用該tomcat時遇到了無法啟動問題
問題描述及初步解決
雙擊startup.bat腳本無任何反應,所以在cmd窗口去運行,結果發現如下錯誤信息:
翻譯為:
<code>CATALINA_HOME環境變量定義不正確 運行此程序需要此環境變量 複製代碼/<code>
遂查看系統環境變量,果然發現該環境變量:
刪除該變量後,tomcat得以正常啟動
那麼為啥會出現這個問題呢?
在經過面向百度編程之後,找到問題原因:tomcat的startup.bat腳本中有代碼如下:
雖然看不懂語法 但是大概意思可以理解:
啟動時如果設置了CATALINA_HOME就會去對應的CATALINA_HOME下的bin目錄去找對應的腳本啟動tomcat
如果沒找到就設置CATALINA_HOME為當前目錄 就會去執行當前路徑的bin目錄下的腳本(正常啟動)
然後在上面代碼的26行我找到了出錯原因:
我係統變量中配置的目錄非tomcat根目錄而是bin目錄 根據26行的代碼可知 腳本啟動後它會去CATALINA_HOME下的bin目錄去找catalina.bat腳本執行 我的變量中配置的目錄為bin目錄所以報了CATALINA_HOME環境變量定義不正確
找到錯誤原因後我嘗試修改了CATALINA_HOME的環境變量 刪除了原本的bin 改為了tomcat7的根目錄
再次嘗試啟動tomcat8 發現本次可以正常啟動 但是啟動的tomcat卻是環境變量中配置的tomcat7
這證明了之前的猜測是正確的!進行最後一步測試
隨後刪除該成員變量後tomcat8正常啟動!
得出結論:
tomcat啟動時如果設置了系統變量CATALINA_HOME就會拼接路徑為:CATALINA_HOME\bin,然後去該路徑執行對應腳本
如果沒有設置CATALINA_HOME,則會正常執行當前目錄的腳本
至此該問題解決!
終極解決方案
解決該問題的第二天(重啟電腦後),當我再次嘗試啟動tomcat8時,再次出現了第一次的問題,直接閃退,使用cmd啟動後發現了跟第一次一樣的問題:CATALINA_HOME環境變量定義不正確
再次去查看系統環境變量確認已經刪除了CATALINA_HOME環境變量
經過再次上網查詢後找到解決方案:
在tomcat8的startup.bat腳本中手動設置CATALINA_HOME為該tomcat的根目錄
最終測試結果可以正常執行 同時不影響tomcat7的正常執行
總結
由於tomcat啟動腳本的機制,所以建議刪除系統變量中的CATALINA_HOME,如果刪除了之後還是有某個tomcat出現CATALINA_HOME問題無法啟動,則可以給該tomcat手動設置CATALINA_HOME