2015-06-09 42 views
3

前几天,当我打开电脑时,我试图启动tomcat,并且自从我处理软件开发以来第一次得到一个惊喜。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 
+0

什么是D:\ Programme? – ACV

+0

不明白是什么意思 – Denees

+0

你确定你有一个标准的tomcat吗?我建议使用zip独立版本的tomcat。 – ACV

回答

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服务器的配置。转到窗口>服务器,在左边的列表中选择您的服务器,然后单击平台选项卡。如果“虚拟机选项”字段包含-agentpath参数的值,并且该值中包含空格,请确保此值包含在双引号字符中。

如果在配置文件模式下启动Tomcat,还会使用-agentpath参数。下面是完整的命令行我看到用来启动Tomcat的配置文件模式在NetBeans 8.0.2,用的工具有Sysinternals的帮助下抓获,并格式化为可读性:

"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.batC:\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

找不到任何'agentpath'字段或参数 – Denees

+0

@Denees:在这种情况下,你可以检查NetBeans服务器的配置(请参阅我更新的答案)? –

+0

我在那里的唯一参数'-Xms512m -Xmx512m -XX:PermSize = 256m -XX:MaxPermSize = 512m' – Denees

0

你应该把 “C:\ Program Files文件” 引号或更好,安装Tomcat到一个文件夹,而不在其名称中的空格。

+0

但tomcat安装在C:\ – Denees