对于catalina.bat和service.bat,tomcat脚本没有以相同的方式处理Java环境变量?

时间:2018-06-15 17:46:35

标签: tomcat tomcat8 catalina

我正在使用tomcat 8.5.15。我的项目版本,我有一个关于为tomcat设置java环境变量的问题。

我在我的Windows机器上安装了JRE,并将环境变量设置为JAVA_HOME而不是JRE_HOME。

  1. catalina.bat start命令运行正常,但我将此变量定义错误。
  2. service.bat install %servicename%正在抛出错误。说  未正确定义JAVA_HOME环境变量。  注意:JAVA_HOME应该指向JDK而不是JRE
  3. 但是,当我说catalina.bat debug时,它会引发同样的错误: NB:JAVA_HOME应该指向JDK而不是JRE

    如果我运行catalina.bat start,catalina.bat无法检查java环境变量? 如何为这两个脚本实现相同的行为?

    谢谢你, 拉斯达马。

1 个答案:

答案 0 :(得分:0)

不。这不是一个错误。 JRE仅包含Java Runtime,只有在您只想运行Java应用程序时才可以使用它。但是要使用JVM调试器功能,必须使用JAVA_HOME指定位置的JDK。

catalina.bat start只运行Tomcat,因此JRE就足够了。

catalina.bat debug将启用调试器并运行Tomcat,因此需要JDK。

事实上,RUNNING.txt已经解释了这种行为:

  

(3.2)设置JRE_HOME或JAVA_HOME(必填)

     

这些变量用于指定Java运行时的位置   环境或用于启动Tomcat的Java Development Kit。

     

JRE_HOME变量用于指定JRE的位置。该   JAVA_HOME变量用于指定JDK的位置。

     

使用JAVA_HOME可以访问某些其他启动选项   使用JRE_HOME时不允许使用。

     

如果同时指定了JRE_HOME和JAVA_HOME,则使用JRE_HOME。

catalina.bat中,它还提到:

#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.
#
#   JRE_HOME        Must point at your Java Runtime installation.
#                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
#                   are both set, JRE_HOME is used.

另见:What is the difference between JDK and JRE?

2018年6月18日更新:

  

真正的问题是,如果您安装JRE并将JRE路径设置为JAVA_HOME   而不是JRE_HOME catalina.bat能够找到jre路径和   正常开始。但是,service.bat在里面查找jre文件夹   JAVA_HOME并失败了。如果你定义了JRE_HOME变量,也可以定义service.bat   效果很好。

这是因为catalina.bat会在内部调用setclasspath.batsetclasspath.bat会尝试确保JAVA_HOMEJRE_HOME有效且一致。在您的情况下,它会将JRE_HOME设置为JAVA_HOME,因此即使您未设置catalina.batJRE_HOME也能够找到JRE路径。

service.bat拥有自己的JAVA_HOME / JRE_HOME检查逻辑。因此,如果您只想安装JRE但只设置JAVA_HOME,请尝试在setclasspath.bat之前执行catalina.bat