tomcat 脚本处理 Java 环境变量的方式与 catalina.bat 和 service.bat 不同?



我正在为我的项目使用 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

但是,当我说catalina.bat debug时,它会通过说NB:JAVA_HOME 应该指向 JDK 而不是 JRE来引发相同的错误

为什么卡塔琳娜.bat如果我运行catalina.bat start无法检查 Java 环境变量? 如何为这两个脚本实现相同的行为?

谢谢 拉斯达马。

No.It 不是错误。JRE 仅包含 Java 运行时,仅当您只想运行 Java 应用程序而仅此而已时,才可以使用它。但是要使用 JVM 调试器功能,您必须使用 JDK 的位置由JAVA_HOME指定。

catalina.bat start只会运行Tomcat,所以JRE就足够了。

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

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

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

这些变量用于指定 Java 运行时的位置 环境或用于启动 Tomcat 的 Java 开发工具包。

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.

另请参阅:JDK 和 JRE 有什么区别?


更新于18-六月-2018 :

真正的问题是,如果您安装 JRE 并将 JRE 路径设置为 JAVA_HOME 而不是JRE_HOME卡塔利娜.bat能够找到 JRE 路径和 正常启动。但是,服务.bat在里面查找 jre 文件夹 JAVA_HOME并失败。如果定义JRE_HOME变量,则服务.bat 效果很好。

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

service.bat有自己的检查逻辑JAVA_HOME/JRE_HOME.所以,如果你只想安装JRE而只设置JAVA_HOME,请尝试在catalina.bat之前执行setclasspath.bat

最新更新