原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重。
一、问题场景:
我的软件和环境:
- 操作系统:Windows 10
- Tomcat版本:Tomcat 9.0.44(非安装版)
- Java环境:JDK 1.8.0
需要下载 Tomcat 和 Java ,请转博文:https://jiming.blog.csdn.net/article/details/104713763
Tomcat启动、关闭方法:
- 管理员身份打开cmd,进入 tomcat 目录下的 /bin,输入【startup.bat】指令,运行启动文件即可;
- 关闭窗口,就相当于关闭本地 Tomcat 服务。
除了运行成功以外,当然也可能也会遇到某些异常,小编就遇到了这么一个,如下图所示:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
二、原因分析:
错误提示的译文:
既没有定义JAVA_HOME,也没有定义JRE_HOME环境变量,运行此程序至少需要这些环境变量中的一个。
既然是环境变量加载不到,我们就简单概括的分析一下,Tomcat 在哪里需要加载JDK环境变量:
- 先来看看 startup.bat 文件,因为 Tmocat 启动会第一个调用它 →
- startup.bat 调用了 catalina.bat,一起来看看 →
- catalina.bat 则调用了 setclasspath.bat,额嗯,重点就在这里了!!
整个调用链路:启动文件startup.bat → catalina.bat → setclasspath.bat,setclasspath.bat 里读取系统的环境变量。
做程序员都知道的,配置系统的JAVA【环境变量】。如果“JAVA_HOME”和“JRE_HOME”本身为空,在系统变量中又找不到,就会出现标题中的问题,导致 Tomcat 启动失败。
三、解决办法:
我总结了2种解决方法,原理上是一致的,都是为了让Tomcat启动时能够加载到系统的JAVA环境变量。
- 方法1,是你搜同类问题时,其他博客中普遍介绍的一种,很直接很暴力很有效;
- 而方法2,我认为是最正统的从根本上解决问题的方法。
1. 直接修改 setclasspath.bat 文件:
因为启动 Tomcat 会调用 Tomcat 安装文件中的 “startup.bat”,“startup.bat” 调用了 “catalina.bat”,而它调用了 “setclasspath.bat”,而“setclasspath.bat” 会读取环境变量,因此只要在 “setclasspath.bat” 的开头手动声明环境变量即可;
如:我的Java 1.8.0 安装在了 D:\Program Files\Java\ 目录下
set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_191
set JRE_HOME=D:\Program Files\Java\jdk1.8.0_191\jre
2. 配置JAVA的系统环境变量
右键点击【我的电脑】→选择【属性】→找到【高级系统设置】→进入【环境变量】设置界面...
小伙伴们是不是非常熟悉,没错,新装机的时候,我们都是这么配置JAVA的系统环境变量的,因为之前没有配置,一直使用IDE的默认JDK,所以引发了上述问题
在这里,我们需要配置两个参数:JAVA_HOME 和 Path
-
JAVA_HOME:D:\Program Files\Java\jdk1.8.0_191(你安装的JDK的磁盘路径)
-
Path:%Java_Home%\bin;%Java_Home%\jre\bin;
配置完成以后,重新启动 Tomcat 即可,下面是启动成功的cmd日志,至于Tomcat日志会弹出新的终端显示。
the end ,thank you...
我是 IT无知君,您的点赞、评论和关注,是我不懈创作的动力。
学无止境,气有浩然,让我们一起加油,天涯未远,江湖有缘再见!!