2010-06-21 153 views
1

嘿,我想在Mac OS X上運行的Apache Tomcat 6.0.26 - 雪豹,但沒有運氣:(的Tomcat 6.0在Mac OS X

我已經下載Tomcat的核心來自:http://tomcat.apache.org/download-60.cgi未歸檔它在/ Livrary/Tomcat目錄中,但是當我試圖使用log/catalina.out日誌中的./bin/startup.sh命令運行它時,它似乎無法找到servlet-api:

SEVERE: Error deploying configuration descriptor host-manager.xml 
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String; 
    at org.apache.catalina.core.StandardHost$MemoryLeakTrackingListener.lifecycleEvent(StandardHost.java:561) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4462) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

在啓動期間它會登錄到它正在使用的控制檯CLASSPATH中:

Using CLASSPATH:  /Library/Tomcat/bin/bootstrap.jar

我還沒有嘗試部署我自己的應用程序(* .war),它只是「乾淨」的Tomcat。

回答

4

可能你的系統類路徑會受到2.5之前的servlet API jar的污染。

您可以運行java javax.servlet.http.HttpServlet來檢查它 - 它應該丟棄NoClassDefFound。如果它拋出NoSuchMethodError,請檢查您的類路徑(尤其是CLASSPATH環境變量和lib/ext JRE安裝的子文件夾)。

編輯:試試下面的代碼 - 至少它會顯示違規罐子的位置:

public class Test { 
    public static void main(String[] args) throws Exception { 
     System.out.println(
      Test.class.getClassLoader().getResource("javax/servlet/http/HttpServlet.class")); 
    } 
} 
+0

我沒有設置CLASSPATH變量,我在/ Library/Java/Home/lib/ext中找不到servlet API,但它會拋出NoSuchMethodError – giolekva 2010-06-21 18:26:32

+0

Thanks :),用你的代碼我發現了包含HttpServlet的jar。這是我在/ Users/giolekva/Lirary/Java/Extensions目錄下的Google Closure庫。再次感謝 :) – giolekva 2010-06-21 18:55:04

0

您的CATALINA_BASE和CATALINA_HOME變量是否正確?

(它們應該在啓動時與CLASSPATH一起打印)。

我剛剛嘗試了你所做的(在OS X 10.6.3上下載了新鮮的tomcat 6.0.26),解壓縮了它(我下載了核心/ zip),然後將所有.sh文件設置爲可執行文件: (在bin文件夾中):

chmod a+x *.sh 

之後,運行startup.sh工作順利。

我只能認爲之前的CATALINA變量有衝突嗎?

+0

我已經試過「搭配chmod A + X * .SH」,但結果是一樣的。 下面是完整日誌./startup.sh命令: 使用CATALINA_BASE:/庫/ Tomcat的 使用CATALINA_HOME:/庫/ Tomcat的 使用CATALINA_TMPDIR:/庫/ Tomcat的/ TEMP 使用JRE_HOME:/圖書館/的Java /主頁 使用CLASSPATH:/Library/Tomcat/bin/bootstrap.jar – giolekva 2010-06-21 17:56:30