Tomcat 6 JAVA_HOME

24

我尝试设置JAVA_HOME路径,因为我的Tomcat服务器需要它。我正在尝试设置它,但似乎无法正常工作,并且在我这样做时会导致错误。我正在尝试在setclasspath.bat中设置JAVA


set JAVA_HOME="C:\Program Files (x86)\Java\jre7"

这是在setclasspath.bat的开头

set JAVA_HOME="C:\Program Files (x86)\Java\jre7"
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 At least one of these environment variable is needed to run this program
goto exit

我设置了这个参数并运行了"startup.bat start",但它显示

在此时,Files是未预期的

你能帮我吗?


尝试将JAVA_HOME设置为系统环境变量,打开系统设置的高级选项卡,点击“新建”并设置JAVA_HOME。 - Sachin Thapa
3
你的路径包含空格,在.BAT文件中不起作用。你需要用引号括起来。set JAVA_HOME="C:\Program Files (x86)\Java\jre7"。然而,你正在指向一个JRE,为了让tomcat工作,你必须指向一个JDK(tomcat需要编译器,这不是JRE的一部分,而是JDK的一部分)。 - M. Deinum
9个回答

46

注意:我知道这已经是一个相当老的问题了,但是这里发布的许多答案要么不完整,要么不准确。希望这能帮助节省一些头疼。

首先:Tomcat 不需要 JDK 来运行,只要它知道它是 JRE,它就可以正常工作。

其次,原始问题中的错误来自于 set JAVA_HOME=... 命令的语法问题。Apache 自己可以更好地处理它,剥离和添加 " 引号。

此外,我强烈建议在 bin 文件夹中创建一个 setenv.bat 文件。默认情况下不存在,因此如果您还没有,请创建并在其中添加您的 set JAVA_HOME=...set JRE_HOME=... 行。

使用 JRE 运行

根据 running.txt

JRE_HOME变量用于指定JRE的位置。JAVA_HOME变量用于指定JDK的位置。 使用JAVA_HOME提供了访问某些附加启动选项的权限,而这些选项在使用JRE_HOME时是不允许的。 如果同时指定JRE_HOME和JAVA_HOME,则使用JRE_HOME。 因此,要以这种方式启动,您需要以下内容:
set "JAVA_HOME="
set "JRE_HOME=C:\Program Files (x86)\Java\jre7"

清除JAVA_HOME变量是一种保险措施,但实际上并不是必需的。根据文档,Tomcat将首先尝试使用JRE变量。

问题的解决方案

特别注意引号的位置。这样可以将整个字符串保留在一个变量中,而不包括引号本身在变量内容中。

例如:

set %TEST%="hello"
echo "%TEST%"

将输出""hello""

set "%TEST%=hello"
echo "%TEST%"

将输出"hello"

所以,启动批处理文件脚本试图使用""C:\Program Files (x86)\Java\jre7"",其中第一个非转义空格位于"Program"和"Files"之间。

正如已经指出的那样,在这种特殊情况下删除引号会起作用,但依赖于此是危险的。最好从一开始就安全地包装变量名值。


2
这个完美地解决了!最初我按照这个教程设置了set %JAVA_HOME%="C:\Program Files\path\to\jdk"。但是我用set "JAVA_HOME="清除了JAVA_HOME并运行了set "JRE_HOME=C:\Program Files\path\to\jre"。作为*nix用户,这开始变得很麻烦。谢谢! - tmthyjames
我刚刚设置了一个永久的环境变量 JRE_HOME = C:\.....\jdk。现在一切正常。现在不需要编写那个 setenv.bat 文件了,对吧? - Sriman

10
我在Windows 7上遇到了同样的问题,使用了以下定义(我将其放在jdk bin文件夹中的setenv.bat文件中,如tomcat 7的RUNNING.txt所指定)。
set JAVA_HOME="C:\Program Files (x86)\Java\jre7"

我刚刚尝试完全删除双引号:

set JAVA_HOME=C:\Program Files (x86)\Java\jre7

然后Tomcat启动了。


6
  • 首先,安装Java并找到安装路径。
  • 找到Tomcat的安装路径并在 \bin 中找到 startup.bat。
  • 打开 startup.bat,在 setlocal 之后和 rem Guess CATALINA_HOME if not defined 之前添加以下行(示例)。
:: JAVA
set JAVA_HOME=D:\thushara_data\Java\jdk1.8.0_73
set PATH=%JAVA_HOME%\bin;%PATH%
现在尝试重新运行startup.bat

2
  • 如果无法手动设置变量:

  • 前往高级系统设置并点击 环境变量

  • 系统 变量下点击

  • 新建变量名:JAVA_HOME
  • 变量值:[jdk路径]C:\Program Files\Java\jdk1.8.0_181,然后点击确定

  • 类似地添加 JRE_HOME

  • 新建变量名:JRE_HOME
  • 变量值:[jre路径]C:\Program Files\Java\jre1.8.0_181
  • 点击 确定 > 确定 > 确定

2

将路径放在引号中:

set JAVA_HOME="C:\Program Files (x86)\Java\jre7"

这个错误是由于它将Program Files中的文件解析为单独的参数,而SET并不希望出现这种情况。如果不知道你使用的操作系统、从哪个命令行运行Tomcat等更多信息,我无法确定为什么SET无法正确读取它。


我正在运行它在Windows Server 2008 R2 Enterprise 64位上,关于代码是一个批处理文件;我只是通过CMD运行Tomcat。 - QuinsUK

1
你指向了一个JRE。你需要指向一个JDK,根据你的JRE位置,它可能类似于C:\Program Files (x86)\Java\jdk1.6.0_26或类似的路径。如果你只安装了JRE,那么你需要安装完整的JDK。Tomcat需要能够将JSP编译成.class文件,而JRE无法做到这一点。

4
因为这个回答明显不正确,所以被踩了。我在我的回答里概述了引起初始问题的原因以及如何避免它。 - user909694

1
你的命令失败的原因是因为在“Program Files(x86)”之间有空格,所以它从“Files(x86)”开始读取命令。因此,我们将其放在双引号之间,如下所示。 尝试这个..
set JAVA_HOME="C:\Program Files (x86)\Java\jre7"

0

0

你也可以尝试以下方法来使用 jre1.8v

在Tomcat服务器文件夹中打开cmd并输入以下命令:

set "JAVA_HOME=C:\Program Files (x86)\Java\jre1.8.0_45"

然后输入命令cd bin

接着,输入命令startup来启动Tomcat服务器

如果需要停止Tomcat服务器,请输入命令shutdown

如果无法启动,您可以尝试运行命令:cd startup.bat


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接