几天前,当我打开计算机电源时,我尝试启动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
我无法理解这一点,也无法在google中找到有关此的任何信息,尝试使用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
最佳答案
这是由无效的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重新安装到其中不包含任何空格的文件夹中。