在学习elasticsearch时为了方便进行数据查询,使用了head插件
因为elasticsearch版本较高(6.3.0),没有与版本相符的head插件,将以独立web项目运行
所以提供了一个tomcat 单独运行head web项目
在使用该tomcat时遇到了无法启动问题
双击startup.bat脚本无任何反应,所以在cmd窗口去运行,结果发现如下错误信息:
翻译为:
CATALINA_HOME环境变量定义不正确 运行此程序需要此环境变量 复制代码
遂查看系统环境变量,果然发现该环境变量:
删除该变量后,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
本文已在csdn同步上传: CATALINA_HOME导致的tomcat无法正常启动问题