【问题标题】:tomcat scripts are not handling Java environment variables in the same manner for catalina.bat and service.bat?tomcat 脚本没有以与 catalina.bat 和 service.bat 相同的方式处理 Java 环境变量?
【发布时间】:2018-06-19 06:18:55
【问题描述】:

我正在使用 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 should point to a JDK not a JRE

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

谢谢, 拉斯达玛。

【问题讨论】:

  • 两个错误指向相同:您需要使用 JDK 而不是 JRE。

标签: tomcat tomcat8 catalina


【解决方案1】:

不,这不是错误。 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 开发工具包。

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.bat,而setclasspath.bat 会尝试确保JAVA_HOME 和JRE_HOME 有效且一致。在您的情况下,它会将JRE_HOME 设置为JAVA_HOME,因此即使您没有设置JRE_HOME,catalina.bat 也能够找到 JRE 路径。

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

【讨论】:

  • 嗨陈,感谢您的回答。但是,我的问题仍然是相同的,如果我运行 catalina.bat start ,为什么 catalina.bat 无法检查 java 环境变量?如何为这两个脚本实现相同的行为?在我的情况下,我安装了 JRE ,将环境变量定义为 JAVA_HOME 而不是 JRE_HOME。 catalina.bat start 可以正常工作。 service.bat install tomcat8.5 抛出错误。说NB: JAVA_HOME should point to a JDK not a JRE
  • 你需要安装JDK。然后将 JAVA_HOME 设置为 JDK 的位置。如果只安装 JRE,则无法在调试模式下运行。
  • We don't need JDK. JRE should be fine, if we set JRE_HOME environment variable. 我相信你没有得到这个场景。首先,JRE 足以运行 tomcat。第二件事是,catalina.bat 和 service.bat 在识别 java 时没有类似的行为。 Real Problem is, if you install JRE and set JRE path as JAVA_HOME instead of JRE_HOME catalina.bat is able to find the jre path and starts normally. But, service.bat looks for jre folder inside JAVA_HOME and fails. if you define JRE_HOME variable, service.bat also works great.
  • 好的。终于明白你的问题了。查看我修改后的答案。
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多