【发布时间】:2018-03-01 06:17:05
【问题描述】:
目前我们面临一个奇怪的问题。我们有一个大型应用程序,它在 webapp 目录中部署为 ROOT.war(没有其他应用程序)。 Tomcat (8.0.32) 在启动时解压战争。它作为 Windows 服务启动。
当我们停止服务并重新启动它时,就会发生 NoClassDefFoundError(我们自己的类之一,每次都相同)。在新的停止/启动后,它确实有效。停止/启动-> 不起作用。停止/启动 -> 是否有效等等...
我们在 Eclipse 上开发,在开发过程中不会遇到这个问题。
我不知道如何解决这个问题。我在上下文中尝试了 reloadable=false 并在主机上尝试了 autoDeploy=false unpackWars = true 。
我们正在使用 Spring/Hibernate。
消息:无法使用构造函数“public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)”和参数“p=[MyOtherPage], userName=[abc1]”来实例化页面。施工过程中出现异常! 根本原因: java.lang.NoClassDefFoundError: my.package.MyPanel 在 my.package.MyPage.(MyPage.java:114) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) 在 org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) 在 org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 在 my.package.web.filter.MDCPersistenceFilter.doFilter(MDCPersistenceFilter.java:47) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 my.package.web.filter.TenantContextPersistenceFilter.doFilter(TenantContextPersistenceFilter.java:59) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 完整的堆栈: org.apache.wicket.WicketRuntimeException:无法使用构造函数“public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)”和参数“p=[MyOtherPage],userName=[ abc1]'。施工过程中出现异常! 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:194) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)注意:我重命名了我们公司的包...
在 MyPage 的第 114 行,我们正在创建一个 MyPanel 类型的新面板。
【问题讨论】:
-
你能显示tomcat给出的信息吗?
-
更新开始帖。
-
不同项目中的混合 Wicket 版本? JAR 捆绑在 WAR 或 Tomcat/lib 中?
-
Jars 在 webapps/ROOT/WEB-INF/lib 中,只有 1 个 Wicket 版本 (6.18)
-
@Stefan 这个错误是由于 ava.lang.NoClassDefFoundError: my.package.MyPanel .does not find in classpath 。也许你应该编译和构建战争。清除 tomcat 中的历史记录并部署删除工作、临时文件夹
标签: java tomcat classloader