问题现象
在windows同一个环境里设置了两个tomcat目录,端口号不同,应用不同,在A目录下 运行tomcat/bin/start.bat 但是启动的确实B目录下的tomcat以及项目。
问题原因
当前windows环境里设置了环境变量CATALINA_HOME,这样以来不管在哪里运行start脚本都会使用这个CATALINA_HOME指定的tomcat。 所以根据需要将这个环境变量删除即可。
具体剖析
先看看tomcat的bin下start.bat(以tomcat 8.0.41)文件内容:
rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHomeset "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
首先设置CUTRRENT_DIR 为 %cd%,%cd%表示获取当前这个start.bat文件所在目录完整路径。
之后判断有没有设置CATALINA_HOME环境变量,则将这个CATALINA_HOME设置为当前目录%CURRENT_DIR%,当前目录则通过当前路径获取。
如果没有设置CATALINA_HOME环境变量,并且当前目录下不存在bin\catalina.bat那么就提示:
The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
然后就结束了。就需要先解决这个提示的问题。
再看接下来的内容:
整体逻辑就是start.bat去找某个目录下的\bin\catalina.bat 如果没有找到就提示:
Cannot find XXXXX/bin/catalina.bat
This file is needed to run this program
如果存在指定的这个目录下的\bin\catalina.bat 就执行:if ""%1""=="""" (这个表示 判断命令行第一个参数 )如果第一个参数为空就调用 前面找到的 XXX/bin/catalina.bat start 加上获取到的命令行参数 CMD_LINE_ARGS 。。。
大致就是这样了....