使用来自Cygwin的Tomcat,接收ClassNotFoundException,

时间:2014-06-04 19:05:04

标签: tomcat java-8 classnotfoundexception

我一直在寻找这个问题的潜在解决方案。我知道在启动Tomcat时有一些问题和答案可以解决这个异常,但所有这些都是基于Eclipse正在使用的假设。

我已经通过Cygwin CLI构建并安装了我的项目,并从那里启动了我的服务器,并且没有涉及任何IDE - 因此,解决涉及Eclipse的问题的许多过程和方法都不是对我来说很清楚以下是我的错误的堆栈跟踪,可在我的tomcat/logs/localhost.log

中找到
SEVERE: Error loading WebappClassLoader
context: /ole
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1ac631b
org.apache.axis2.transport.http.AxisAdminServlet
java.lang.ClassNotFoundException: org.apache.axis2.transport.http.AxisAdminServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

1 个答案:

答案 0 :(得分:2)

我认为我不能对你的问题给出具体的解决方案,因为我需要更多关于你的应用程序的详细信息(它实现了哪些类等),但是我可以提供一些提示可能会帮助你调查自己。

首先了解标准Java类加载过程非常重要:

enter image description here

Tomcat扩展了这个模型,默认情况下让类加载器首先查看Web应用程序,然后让父类加载器查找请求的类(delegate: false)。这是为了增加类加载的安全性和灵活性,例如

  • 缓存类
  • 限制要从WEB-INF/libWEB-INF/classes
  • 中加载的代码
  • 动态加载类(在运行时等)

因此,如果您以任何方式篡改此流程/安全限制或实施java.class.ClassLoader这是开始调查的好地方。

虽然我建议您只是从一个独立的干净tomcat安装开始,检查它是否有效,然后再次部署您的应用程序,如果它一直中断,那么您知道它确实是您的应用程序破坏它。

然后根据上述原则开始有趣的调查。

Further reading

希望这会有所帮助。