Tomcat无法启动

问题描述 投票:0回答:3

前几天,当我打开电脑时,我尝试启动tomcat,得到了从事软件开发以来的第一次惊喜。

确切的错误消息是:

Using CATALINA_BASE:   "C:\apache-tomcat-8.0.9"
Using CATALINA_HOME:   "C:\apache-tomcat-8.0.9"
Using CATALINA_TMPDIR: "C:\apache-tomcat-8.0.9\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_45"
Using CLASSPATH:       "C:\apache-tomcat-8.0.9\bin\bootstrap.jar;C:\apache-tomcat-8.0.9\bin\tomcat-juli.jar"
Error occurred during initialization of VM
Could not find agent library D:\Program in absolute path, with error: Can't find dependent libraries

我无法理解它的要点,也无法在谷歌中找到任何关于此的信息,尝试使用3个不同版本的tomcat 7.0.8、8.0.5、8.0.9,所有情况都是相同的。当我看到这个时,我认为 JDK 已经过时了,因为我有几个版本,然后我从 PC 上删除了所有 JDK 和 JRE,只安装了最后一个 8u45,但没有任何运气。有人能指出我正确的方向吗?

输出带有

echo

Using CATALINA_BASE:   "C:\Users\Denees\AppData\Roaming\NetBeans\8.0.1\apache-tomcat-8.0.15.0_base"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15"
Using CATALINA_TMPDIR: "C:\Users\Denees\AppData\Roaming\NetBeans\8.0.1\apache-tomcat-8.0.15.0_base\temp"
Using JRE_HOME:        "C:\Java\jdk1.8.0_45"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15\bin\tomcat-juli.jar"
"C:\Java\jdk1.8.0_45\bin\java.exe" -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=1024m -Dhttp.nonProxyHosts="localhost|127.0.0.1|Denees" -Drebel.env.ide.plugin.version=6.2.0.1 -Drebel.env.ide.version=8.0.2 -Drebel.env.ide.product=netbeans -Drebel.env.ide=netbeans -Drebel.base=C:\Users\Denees\.jrebel -Drebel.notification.url=http://localhost:57212 -agentpath:D:\Program Files\NetBeans 8.0.1\java2\griffin\lib\jrebel64.dll -Djava.util.logging.config.file="C:\Users\Denees\AppData\Roaming\NetBeans\8.0.1\apache-tomcat-8.0.15.0_base\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager   -Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15\endorsed" -classpath "C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15\bin\tomcat-juli.jar" -Dcatalina.base="C:\Users\Denees\AppData\Roaming\NetBeans\8.0.1\apache-tomcat-8.0.15.0_base" -Dcatalina.home="C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.15" -Djava.io.tmpdir="C:\Users\Denees\AppData\Roaming\NetBeans\8.0.1\apache-tomcat-8.0.15.0_base\temp" org.apache.catalina.startup.Bootstrap  start
java tomcat java-8 java-7
3个回答
5
投票

这是由无效的 JVM 命令行参数引起的错误。这是重现它的一种方法:

C:\>java -agentpath:D:\Program Files\blahblah
Error occurred during initialization of VM
Could not find agent library D:\Program in absolute path, with error: Can't find dependent libraries

检查 Tomcat 的 Java 选项。以管理员身份运行

%CATALINA_HOME%\bin\tomcat8w.exe
,导航到 Java 选项卡并查看 Java 选项。如果
-agentpath
的值中有空格,请将该值用双引号引起来。

如果在 Tomcat 启动时找不到任何此类参数,请检查 NetBeans 中 Tomcat 服务器的配置。转到“窗口”>“服务器”,在左侧列表中选择您的服务器,然后单击“平台”选项卡。如果“VM 选项”字段包含

-agentpath
参数的值,并且该值中包含空格,请确保该值用双引号字符括起来。

如果您在配置文件模式下启动 Tomcat,也会使用

-agentpath
参数。以下是我看到的用于在 NetBeans 8.0.2 中以配置文件模式启动 Tomcat 的完整命令行,它是在 Sysinternals Process Explorer 的帮助下捕获的,并进行了格式化以便于阅读:

"C:\Program Files\Java\jdk1.8.0_05\bin\java.exe"   
  -Dhttp.nonProxyHosts="localhost|127.0.0.1|Stalactite"
  -agentpath:"C:\Program Files\NetBeans 8.0.2\profiler\lib\deployed\jdk16\windows-amd64\profilerinterface.dll=C:\Program Files\NetBeans 8.0.2\profiler\lib",5140
  -Dnbprofiler.agentid=1145099082
  -Djava.util.logging.config.file="C:\Apache\Tomcat8.0.12\conf\logging.properties"
  -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  -Djava.endorsed.dirs="C:\Apache\Tomcat8.0.12\endorsed"
  -classpath "C:\Apache\Tomcat8.0.12\bin\bootstrap.jar;C:\Apache\Tomcat8.0.12\bin\tomcat-juli.jar" 
  -Dcatalina.base="C:\Apache\Tomcat8.0.12"
  -Dcatalina.home="C:\Apache\Tomcat8.0.12"
  -Djava.io.tmpdir="C:\Apache\Tomcat8.0.12\temp"
  org.apache.catalina.startup.Bootstrap start

您可能使用的是旧版本的 NetBeans,这可能会为

-agentpath
参数生成无效值。

如果以上所有步骤都失败,您将需要准确找出用于启动 Java 的命令行是什么。为此,请在文本编辑器中编辑

catalina.bat
(
C:\apache-tomcat-8.0.9\bin\catalina.bat
)。底部有四行,全部以
%_EXECJAVA%
开头。复制每行,将其粘贴到正上方,并在其前面添加
echo
。因此,它看起来不像下面这样(为了清楚起见,我缩写了
%_EXECJAVA%
行):

if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
goto end
:doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
goto end
:doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
goto end

它应该看起来像

if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
goto end
:doSecurity
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% ...
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
goto end
:doSecurityJpda
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% ...
goto end

然后,当您启动 Tomcat 时,您应该看到运行完整的命令行来启动 Java。这应该出现在 NetBeans 日志窗口中,位于以

Using CLASSPATH:
开头的行的正下方。

现在您已经完成了此操作并获得了输出,我很快就可以看出问题是由命令行的以下部分引起的。

-agentpath:D:\Program Files\NetBeans 8.0.1\java2\griffin\lib\jrebel64.dll

所以你正在使用 JRebel。

我没有使用 JRebel,而且由于我没有社交媒体帐户,我什至无法注册试用它。我所能做的就是安装 JRebel NetBeans 插件并查看各个选项。

如果您将 Tomcat 作为远程服务器运行,则 JRebel 插件选项的启动选项卡(工具 > 选项 > JRebel > 启动)上的设置说明中存在错误。要求您创建的

catalina-jrebel.bat
文件的第 3 行如下:

set JAVA_OPTS=-javaagent:%REBEL_HOME%\jrebel.jar -Drebel.remoting_plugin=true %JAVA_OPTS%

如果您的

REBEL_HOME
环境变量中包含空格(就像您计算机上的情况一样),这当然是错误的。上述批处理脚本的第三行应在
-javaagent
参数的值周围包含引号,即:

set JAVA_OPTS=-javaagent:"%REBEL_HOME%\jrebel.jar" -Drebel.remoting_plugin=true %JAVA_OPTS%

如果您通过 IDE 启动 Tomcat,JRebel 应该会自动设置服务器。如果这就是您正在做的事情,但仍然不起作用,那么我会寻求 ZeroTurnaround 的支持,因为这是 JRebel 问题。

顺便说一句,在您的计算机上,似乎

REBEL_HOME
环境变量指向
D:\Program Files\NetBeans 8.0.1
下的某个位置 - 我以为您说您已安装 NetBeans 8.0.2?

最后,作为最后的手段,请尝试将 NetBeans 重新安装到其中不包含任何空格的文件夹中。


0
投票

[2024-04-30 12:34:33] [错误] [15844] FindClass org/apache/catalina/startup/Bootstrap 失败 [2024-04-30 12:34:33] [错误] [16448] 无法启动Java [2024-04-30 12:34:33] [错误] [16448] ServiceStart 返回 4。

在此输入图片描述

当我尝试使用 TomCat 在 Netbean 上部署我的项目时,会发生此错误


-1
投票

您应该将“C:\Program Files”放在引号中,或者更好,将 tomcat 安装到名称中不带空格的文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.