在 Java 11:NB 上安装 tomcat 7 作为服务:JAVA_HOME 应该指向 JDK 而不是 JRE

Installing tomcat 7 as a service on Java 11:NB: JAVA_HOME should point to a JDK not a JRE

我已经安装了Java11并且设置系统变量为:

JAVA_HOME
C:\Program Files\AdoptOpenJDK\jdk-11.0.5.10-hotspot

的路径
C:\Program Files\AdoptOpenJDK\jdk-11.0.5.10-hotspot\bin

当我尝试使用 service.bat 将 tomcat 安装为服务时,出现以下错误:

The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

我在网上做了调查。我的路径设置正确。一些解决方案说在没有空格的目录中安装 java,但我得到同样的错误。

echo java 命令给出了正确的输出

echo %JAVA_HOME%
C:\Program Files\AdoptOpenJDK\jdk-11.0.5.10-hotspot

感谢任何帮助。谢谢

Edit1:对于 Andres 的回答,下面是我的第 57 -69 行

rem Make sure prerequisite environment variables are set
if not "%JAVA_HOME%" == "" goto gotJdkHome
if not "%JRE_HOME%" == "" goto gotJreHome
echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
echo Service will try to guess them from the registry.
goto okJavaHome
:gotJreHome
if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome
if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome
goto okJavaHome
:gotJdkHome
if not exist "%JAVA_HOME%\jre\bin\java.exe" goto noJavaHome
if not exist "%JAVA_HOME%\jre\bin\javaw.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
if not "%JRE_HOME%" == "" goto okJavaHome
set "JRE_HOME=%JAVA_HOME%\jre"
goto okJavaHome
:noJavaHome
echo The JAVA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
echo NB: JAVA_HOME should point to a JDK not a JRE
goto end
:okJavaHome

重述信息:

  • JAVA_HOME定义
  • JRE_HOME 未定义(来自
  • Tomcat 是版本 7.0.96(来自
  • 您正在执行 service.bat

这是 apache-tomcat-7.0.96-windows-x64.zip 文件中 service.bat 的相关片段:

47  rem Make sure prerequisite environment variables are set
48  if not "%JAVA_HOME%" == "" goto gotJdkHome
 . . .
56  :gotJdkHome
57  if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
58  rem Java 9 has a different directory structure
59  if exist "%JAVA_HOME%\jre\bin\java.exe" goto preJava9Layout
60  if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
61  if not "%JRE_HOME%" == "" goto okJavaHome
62  set "JRE_HOME=%JAVA_HOME%"
63  goto okJavaHome
 . . .
73  :okJavaHome

批处理脚本执行如下:

  • 48:定义了JAVA_HOME,跳转到第56行
  • 57:%JAVA_HOME%\bin\javac.exe存在,转到下一行
  • 59:%JAVA_HOME%\jre\bin\java.exe不存在,转到下一行
  • 60:%JAVA_HOME%\bin\java.exe存在,转到下一行
  • 61:JRE_HOME未定义,转到下一行
  • 62:将 JRE_HOME 设置为与 JAVA_HOME
  • 相同的值
  • 63:跳转到第73行

现在,如果您收到第 69-71 行打印的消息,则其中一项检查失败,因此请使用以下命令手动检查它们:

Command                                 Expected output
==================================      ===============
echo %JAVA_HOME%                        C:\Program Files\AdoptOpenJDK\jdk-11.0.5.10-hotspot
dir /b "%JAVA_HOME%\bin\javac.exe"      javac.exe
dir /b "%JAVA_HOME%\jre\bin\java.exe"   The system cannot find the path specified.
dir /b "%JAVA_HOME%\bin\java.exe"       java.exe
echo %JRE_HOME%                         %JRE_HOME%

当您发现哪个没有给出预期的输出时,您就会知道为什么会收到您收到的消息。

我必须在笔记本电脑上安装 JRE 11 并将其粘贴到 JDK 文件夹中。然后我能够将 tomcat 安装为具有相同路径的服务,并且 JAVA_HOME 如我的问题中所述。