23

我尝试设置 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”时,它会显示

此时文件出乎意料

你能帮助我吗?

4

9 回答 9

45

注意:我意识到这已经是一个很老的问题了,但是这里发布的许多答案要么不完整,要么不准确。希望这将有助于避免一些麻烦。

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

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

另外,我强烈建议setenv.bat在文件夹中创建一个文件bin。默认情况下它不存在,因此如果您还没有,请创建它并在那里添加您的set JAVA_HOME=...orset 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"",其中第一个非转义空间位于“程序”和“文件”之间。

正如已经指出的那样,删除引号(至少在这种特殊情况下)会起作用,但依赖它是危险的。而是从一开始就安全行事,并将变量名称值用引号引起来。

于 2015-03-16T12:22:27.857 回答
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启动了。

于 2014-10-02T09:21:08.593 回答
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

于 2017-01-05T06:39:18.900 回答
2

将路径放在引号中:

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

该错误是由于它将 Program Files 中的文件解析为单独的参数,这是 SET 不期望的。为什么 SET 没有正确读取它我不能说不知道更多关于你正在使用什么操作系统,你正在从什么命令 shell 运行 Tomcat,等等。

于 2013-08-27T15:12:44.997 回答
2
  • 如果无法手动设置变量:设置JAVA_HOME and JRE_HOME

  • 转到高级系统设置并单击environment变量

  • system变量下单击

  • 新变量名:JAVA_HOME
  • 变量值:[path of jdk]C:\Program Files\Java\jdk1.8.0_181然后单击确定

  • 同样添加JRE_HOME

  • 单击新变量名称:JRE_HOME
  • 变量值:[path of jre]C:\Program Files\Java\jre1.8.0_181
  • 点击Ok> Ok>Ok
于 2018-11-28T06:13:55.653 回答
1

你指向一个JRE。您需要指向一个 JDK,它给定您的 JRE 的位置可能是类似C:\Program Files (x86)\Java\jdk1.6.0_26或类似的东西。或者,如果您只安装了 JRE,则需要安装完整的 JDK。Tomcat 需要能够将 JSP 编译成 .class 文件,这是 JRE 无法做到的。

于 2013-08-28T04:30:45.197 回答
1

您的命令失败的原因是因为它在“程序文件(x86)”之间有空格,因此它开始从“文件(x86)”读取命令。因此,我们将其放在双引号之间,如下所示。尝试这个..

set JAVA_HOME="C:\Program Files (x86)\Java\jre7"
于 2014-07-25T05:33:04.733 回答
0

试试 https://askubuntu.com/questions/446294/how-to-start-tomcat7-when-catalina-sh-does-not-work 即使它不是 Windows 它仍然可以寻找那些 shell 脚本,它可以给你一些洞察力除了它们在 Window 中的扩展名是 .bat 而不是 .sh

于 2015-02-10T04:03:32.857 回答
0

你也可以试试这个jre1.8v

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

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

然后输入命令cd bin

然后启动Tomcat服务器输入命令startup

停止 Tomcat 服务器输入命令shutdown

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

于 2021-10-29T07:09:24.833 回答