【发布时间】:2016-04-06 07:10:31
【问题描述】:
我使用 maven 为 dao 和模型包创建了一个外部自定义 jar 文件,我将该 jar 文件导入到我想访问 dao 方法的客户端应用程序中,但它给出了 java.lang.NoClassDefFoundError:com/test/ users/dao/UserDao 但 .class 文件存在于 jar 文件中。我能够在客户端 Web 应用程序中看到该特定自定义 jar 文件的包和方法。 在服务端项目中,我们将其作为客户端应用程序的 jar,maven pom 文件具有以下依赖关系
groupId-- com.test
artifactId--服务
名称--testServiceGjcp
包装--罐子
版本--1.0.0-BUILD-SNAPSHOT
根据上述依赖属性 groupid、aritfact id 和版本,我们在客户端应用程序 maven pom.xml 文件中将其作为依赖项提供,然后我们将生成的服务 jar 文件添加到客户端 maven 依赖项中并构建客户端应用程序, jar 已创建,可以看到生成的 jar 文件中的 .class 文件。
但是,即使 .class 文件及其对应的包以及该特定 .class 文件的方法存在,我们仍然会收到 java.lang.NoClassDefFoundError。
我在这里粘贴实际错误的完整堆栈跟踪。
11:39:34.466 [http-bio-8080-exec-18] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'appServlet' processing GET request for [/SpringSecurity/login]
11:39:34.479 [http-bio-8080-exec-18] 调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 查找路径 /login 的处理程序方法 11:39:34.481 [http-bio-8080-exec-18] 调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 返回处理程序方法 [public org.springframework.web.servlet.ModelAndView com.test.controller.MainController.login(java.lang.String, java.lang.String,javax.servlet.http.HttpServletRequest)] 11:39:34.481 [http-bio-8080-exec-18] 调试 o.s.b.f.s.DefaultListableBeanFactory - 返回单例 bean 'mainController' 的缓存实例 11:39:34.481 [http-bio-8080-exec-18] 调试 o.s.web.servlet.DispatcherServlet - [/SpringSecurity/login] 的上次修改值为:-1 11:39:34.543 [http-bio-8080-exec-18] 调试 os.web.servlet.DispatcherServlet - 无法完成请求 org.springframework.web.util.NestedServletException:处理程序处理失败;嵌套异常是 java.lang.NoClassDefFoundError: com/test/users/dao/UserDao 在 org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:621) [servlet-api.jar:na] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) [servlet-api.jar:na] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.27] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.27] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) [catalina.jar:7.0.27] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) [catalina.jar:7.0.27] 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [catalina.jar:7.0.27] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) [catalina.jar:7.0.27] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [catalina.jar:7.0.27] 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) [catalina.jar:7.0.27] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.27] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) [catalina.jar:7.0.27] 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) [tomcat-coyote.jar:7.0.27] 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) [tomcat-coyote.jar:7.0.27] 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) [tomcat-coyote.jar:7.0.27] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_75] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_75] 在 java.lang.Thread.run(Thread.java:745) [na:1.7.0_75] 引起:java.lang.NoClassDefFoundError: com/test/users/dao/UserDao 在 com.test.users.service.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:31) ~[MyUserDetailsService.class:na] 在 com.test.controller.MainController.login(MainController.java:53) ~[MainController.class:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] 在 java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] 在 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) ~[spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) ~[spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) ~[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] ...省略了22个常用框架 引起:java.lang.ClassNotFoundException: com.test.users.dao.UserDao 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) ~[catalina.jar:7.0.27] 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) ~[catalina.jar:7.0.27] ...省略了35个常用框架 2016 年 4 月 6 日上午 11:39:34 org.apache.catalina.core.StandardWrapperValve 调用 严重:servlet [appServlet] 的 Servlet.service() 在路径 [/SpringSecurity] 的上下文中抛出异常 [处理程序处理失败;嵌套异常是 java.lang.NoClassDefFoundError: com/test/users/dao/UserDao] 根本原因 java.lang.ClassNotFoundException: com.test.users.dao.UserDao 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 在 com.test.users.service.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:31) 在 com.test.controller.MainController.login(MainController.java:53) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)
【问题讨论】: