Apache Tomcat Windows服务忽略JAVA_HOME环境variables

我正试图让Apache Tomcat设置在Windows Server 2003机器上。 如果我使用命令行版本( catalina.bat start ),它一切正常,但是如果我尝试使用它作为Windows服务,它似乎为JAVA_HOME选取了错误的值 – 它忽略了我设置的环境variables,它使用运行时path而不是JDKpath。 因此,我的脚本将无法编译,应用程序无法运行。

我正在使用一切相当老的版本:Tomcat 4和Java 1.4.2_19(这是一个传统的应用程序,我没有时间更新在莫 – 我只是想让它运行,阶段1)。

我将JDK安装到C:\j2sdk1.4.2_19并将Tomcat安装到C:\Program Files\Apache Software Foundation\Tomcat 4.1 。 该服务的“Java虚拟机”设置设置为C:\j2sdk1.4.2_19\jre\bin\client\jvm.dllJAVA_HOME环境variables设置为C:\j2sdk1.4.2_19

当我尝试启动我的应用程序时,它将以下错误写入日志:

Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set point to the JDK. It is currently set to "C:\j2sdk1.4.2_19\jre"

即它添加了一个额外的“ \jre ”到不应该在那里的JAVA_HOME

我也想知道这是否可能是一个registry设置的地方,但我看了所有明显的地方。 像JavaSoft\Java Development Kit\1.4JavaSoft\Java Runtime Environment\1.4.2_19类的JavaHome密钥一样,将HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat4\Parameters\Java\JavaHome设置为与JAVA_HOME环境variables相同JavaSoft\Java Runtime Environment\1.4.2_19

我开始感到沮丧,试图找出为什么它不会工作!

我最后通过启动一个命令窗口,适当地设置JAVA_HOME ,然后从Tomcat的bin目录运行以下脚本来修复它:

 service.bat remove service.bat install 

我不知道它是如何做的,但重新configuration服务使用JAVA_HOME的新值。

我遇到了Tomcat 6和Java 6的类似问题(我意识到你在谈论Tomcat 4和Java 1.4)

我将在appwiz.cpl检查是否在机器上安装了JRE 1.6 *,因为如果是这样,那么JAVA_HOME不再是从环境variables中取得,而是从JRE 1.6安装创build的registry项中取得。 (在最坏的情况下,您可以编辑%TOMCAT_HOME%/bin/catalina.bat并将JAVA_HOME为指向您的良好JDK ///)

相关链接可能是

https://issues.apache.org/bugzilla/show_bug.cgi?id=41538

检查相应的registry项。 这是我的:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Apache Software Foundation \ Procrun 2.0 \ Tomcat7.55 \ Parameters \ Java

更改Jvm键值