java - 在 Java 11 上安装 tomcat 7 作为服务 :NB: JAVA_HOME should point to a JDK not a JRE

标签 java tomcat7 java-11

我已经安装了 Java 11 并将系统变量设置为:

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

感谢任何帮助。谢谢

编辑1:对于安德烈斯的回答,下面是我的第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 未定义(来自 comment)
  • Tomcat 版本为 7.0.96(来自 comment)
  • 您正在执行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%

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

关于java - 在 Java 11 上安装 tomcat 7 作为服务 :NB: JAVA_HOME should point to a JDK not a JRE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402002/

相关文章:

java - Mahout 随机森林分类器示例 ArrayIndexOutOfBoundsException

java - 空对象引用上的“android.content.res.Resources android.content.Context.getResources()”。将字符串数组转换为语音

java - 运行 Tomcat 7.0.34 错误 : Can't find catalina. jar

java - 让 javaFX 11 应用程序在 docker 上运行

java - Instant 和 Date 之间的转换是否从 Java 8 更改为 11?

java - 在 java 11 中从 wsdl 生成类

java - 在不使用索引的情况下打印出 ArrayList 中的特定行

使用远程服务的 Java 序列化和实例共享

java - 在哪里可以找到startupApacheTomcat7.txt?

java - 清除 tomcat 7 中 web 应用程序的所有 session