Mac OS X上的Tomcat 6.0

时间:2010-06-21 17:28:25

标签: java apache macos tomcat classpath

嘿,我正在尝试在Mac OS X上运行Apache Tomcat 6.0.26 - Snow Leopard,但没有运气:(

我已经从http://tomcat.apache.org/download-60.cgi下载了Tomcat核心,并将其归档到/ 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。

2 个答案:

答案 0 :(得分:4)

可能你的系统类路径以某种方式受到2.5之前的servlet API jar的污染。

您可以通过运行java javax.servlet.http.HttpServlet来检查它 - 它应该抛出NoClassDefFound。如果它抛出NoSuchMethodError,请检查您的类路径(尤其是CLASSPATH环境变量和JRE安装的lib/ext子文件夹。)

编辑:尝试使用以下代码 - 至少它会显示有问题的jar的位置:

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

答案 1 :(得分: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变量存在冲突吗?