Windows下CATALINA_HOME必须严格设为全大写带下划线,因catalina.bat硬编码检查该名称;Linux/macOS还需export导出,IDEA等工具需单独配置环境变量或启用继承选项。

Windows 下 CATALINA_HOME 大小写不敏感,但别信它
Windows 系统本身对环境变量名不区分大小写,CATALINA_HOME、catalina_home、Catalina_Home 在系统层面都会被识别为同一个变量。但 Tomcat 的 catalina.bat 脚本内部硬编码检查的是 CATALINA_HOME(全大写 + 下划线)。如果设成小写变量名,脚本会跳过赋值逻辑,直接报错 “The CATALINA_HOME environment variable is not defined correctly”。这不是系统问题,是脚本逻辑决定的。
实操建议:
- 务必在系统环境变量中新建变量名:严格使用
CATALINA_HOME(全大写、带下划线) - 不要依赖“Windows 不区分大小写”而图省事写成
catalina_home或CATALINA_HOME拼错成CATALINA_HOMEE - 验证时用命令
echo %CATALINA_HOME%,而不是echo %catalina_home%—— 后者可能偶然回显值,但不代表catalina.bat能读到
Linux/macOS 中 CATALINA_HOME 必须全大写且 export 显式声明
Linux 和 macOS 对环境变量名完全区分大小写,CATALINA_HOME 和 catalina_home 是两个独立变量。catalina.sh 只认 CATALINA_HOME,且要求它必须是已 export 的 shell 变量。仅在 ~/.bashrc 里写 CATALINA_HOME=/opt/tomcat 不够,没 export 就不会被子进程继承。
常见错误现象:
- 执行
./startup.sh时提示 “Neither the CATALINA_HOME nor the CATALINA_BASE environment variable is defined” -
echo $CATALINA_HOME在当前终端显示正常,但脚本里读不到
正确做法:
- 在
~/.bashrc或/etc/profile中写两行:CATALINA_HOME=/opt/tomcatexport CATALINA_HOME - 修改后必须运行
source ~/.bashrc(或新开终端),否则export不生效 - 避免在
catalina.sh里手动改写变量名 —— 它只读取已导出的CATALINA_HOME,改了也白改
IDEA 或其他 IDE 启动 Tomcat 时忽略系统环境变量
IntelliJ IDEA 默认不继承系统级环境变量,即使你已在 Windows 系统变量或 Linux /etc/profile 里配好 CATALINA_HOME,IDEA 启动的 Tomcat 进程仍可能报同样错误。这是因为 IDEA 的 JVM 进程启动时未加载这些变量。
解决路径只有两条:
- 在 IDEA 的 Run Configuration → Environment variables 里手动添加:
CATALINA_HOME=/path/to/tomcat - 或在 IDEA 设置 → Build, Execution, Deployment → Console → Shell path 中指定一个已加载环境变量的 shell(如
/bin/bash --login),强制它读取~/.bashrc
注意:IDEA 的 “Pass environment variables to forked processes” 选项默认关闭,不勾选就等于白配。
脚本里硬编码路径比依赖环境变量更可靠?
有些团队干脆绕过 CATALINA_HOME,直接在自定义部署脚本里写死路径,比如 java -Dcatalina.home=/opt/tomcat ... -jar bootstrap.jar。这确实能避开大小写和导出问题,但代价是丧失可移植性 —— 每换一台机器就得改脚本。更隐蔽的风险是:catalina.sh 内部仍会尝试读取 CATALINA_HOME 来定位 conf/ 和 lib/,若该变量为空或错位,日志输出、JVM 参数加载、甚至某些 Valve 行为都可能异常。
真正稳定的方案是:统一用标准变量名 + 正确导出 + 显式验证。每次配完,别只信 echo,一定要进 bin/ 目录跑一次 ./catalina.sh version —— 它不启动服务,但会完整走一遍变量解析流程,失败立刻暴露。

















