【发布时间】:2014-02-13 08:46:13
【问题描述】:
任何帮助将不胜感激。我正在运行一个 Web 应用程序,它依赖于我工作空间中的另外两个项目。这两个项目进一步依赖于我工作区中的其他 3 个项目。工作空间内的任何项目都没有错误。在 Tomcat 中运行 Web 应用程序会产生以下错误:
java.lang.NoClassDefFoundError: com/tele/misc/DefaultApplicationModule
这是第一级依赖项目中的一个类。直到最近一切正常。这显然是某种类路径问题?关于如何在 Eclipse 元数据中找到它并解决这个问题的任何建议?
更多细节:
控制台:
*******************************************************************
*** WARNING: Apache MyFaces-2 is running in DEVELOPMENT mode. ***
*** ^^^^^^^^^^^ ***
*** Do NOT deploy to your live server(s) without changing this. ***
*** See Application#getProjectStage() for more information. ***
*******************************************************************
Feb 13, 2014 1:41:18 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Feb 13, 2014 1:41:18 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/CRGen] startup failed due to previous errors
Feb 13, 2014 1:41:18 PM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class za.co.huge.processor.CRToolContextListener
java.lang.NoClassDefFoundError: com/tele/misc/DefaultApplicationModule
at za.co.huge.processor.ReportProcessor.<init>(ReportProcessor.java:30)
at za.co.huge.processor.ReportProcessor.getInstance(ReportProcessor.java:41)
at za.co.huge.processor.CRToolContextListener.contextDestroyed(CRToolContextListener.java:22)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4927)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5573)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Feb 13, 2014 1:41:18 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Feb 13, 2014 1:41:18 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Feb 13, 2014 1:41:18 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2547 ms
所有这些都源自我的 servlet 上下文侦听器:
<!-- CRTool Context listener starts report processing Engine -->
<listener>
<listener-class>za.co.huge.processor.CRToolContextListener</listener-class>
</listener>
在依赖项目的 Guice 模块上初始化时失败:
/* singleton design pattern - so only one service thread can be running */
private ReportProcessor(final long sleepTime){
serviceThread = new ServiceThread(sleepTime);
thread = new Thread(serviceThread);
thread.setPriority(Thread.MIN_PRIORITY);
final Injector injector = Guice.createInjector(new DefaultApplicationModule());
// final Injector injector = Guice.createInjector(new CommissionsModule(), new DefaultApplicationModule());
// ci = injector.getInstance(CommissionsImpl.class);
}
【问题讨论】:
-
您是否尝试过 Eclipse 中 Tomcat 的“清洁”选项?你试过重启Tomcat吗?
-
是的!多次清理并重新运行。
-
您能否将完整的堆栈跟踪添加到您的问题中?我想到了一些根本原因,但很难猜测是哪一个导致了您的问题。
-
找出 Eclipse 在哪里部署应用程序(在“服务器”视图中双击服务器运行时),并检查那里部署了什么。可能图书馆根本不在那里。然后将寻求找出为什么不这样做,这在很大程度上取决于您拥有或没有哪些插件。我会检查项目的部署程序集,可能它很不稳定。
-
@Gimby 同意!未部署依赖代码。这正是我想要弄清楚的......
标签: java eclipse tomcat7 classpath