2015-06-09 140 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