Tomcat 6 JAVA_HOME

Qui*_*sUK 20 java tomcat batch-file tomcat6

我尝试设置JAVA_HOME路径,因为我的Tomcat服务器正在寻找它.我试图设置它,但它似乎不起作用,并在我这样做时导致错误.我正在尝试使用setclasspath.bat设置JAVA

set JAVA_HOME="C:\Program Files (x86)\Java\jre7"
Run Code Online (Sandbox Code Playgroud)

这是在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
Run Code Online (Sandbox Code Playgroud)

当我设置它并运行"startup.bat start"时,它会显示

目前文件是意料之外的

你能帮助我吗?

ZaL*_*HkA 37

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

首先:Tomcat 不需要运行JDK,只要它知道它是一个JRE,它就可以正常使用JRE.

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

另外,我强烈建议setenv.batbin文件夹中创建一个文件.默认情况下它不存在,所以如果您还没有,请创建它并在那里添加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"
Run Code Online (Sandbox Code Playgroud)

清除JAVA_HOME变量是一种故障保护,但并不是真的需要它.根据文档,Tomcat将首先尝试使用JRE变量.

问题解决方案

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

例如:

set %TEST%="hello"
echo "%TEST%"
Run Code Online (Sandbox Code Playgroud)

会输出""hello"".

set "%TEST%=hello"
echo "%TEST%"
Run Code Online (Sandbox Code Playgroud)

会输出"hello".

因此,启动批处理文件脚本正在尝试使用""C:\Program Files (x86)\Java\jre7"",其中第一个非转义空间位于"Program"和"Files"之间.

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

  • 这工作得很好!我最初按照这个 [教程](https://www.youtube.com/watch?v=gz1pnr7P8lY) 设置了 %JAVA_HOME%="C:\Program Files\path\to\jdk"`。但是我用 `set "JAVA_HOME="` 清除了 JAVA_HOME 并运行了 `set "JRE_HOME=C:\Program Files\path\to\jre"`。来自 *nix,这开始变得很痛苦。谢谢! (2认同)

小智 8

我在Windows 7上遇到了同样的问题,具有以下定义(我将它放在tomcat 7的RUNNING.txt指定的jdk bin文件夹中的setenv.bat文件中.

set JAVA_HOME="C:\Program Files (x86)\Java\jre7"
Run Code Online (Sandbox Code Playgroud)

我只是尝试删除双引号:

set JAVA_HOME=C:\Program Files (x86)\Java\jre7
Run Code Online (Sandbox Code Playgroud)

然后tomcat开始了.


tk_*_*tk_ 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%
Run Code Online (Sandbox Code Playgroud)

现在尝试重新运行 startup.bat


Jam*_*ran 1

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

  • 被否决,因为这个答案明显不正确。我在[我的答案](http://stackoverflow.com/questions/18468681/tomcat-6-java-home/29076720#29076720)中概述了导致初始问题的原因以及如何避免它。 (4认同)