我使用maven为dao和模型包创建了一个外部自定义jar文件,并将该jar文件导入要访问dao方法的客户端应用程序中,但是它给出了java.lang.NoClassDefFoundError:com / test / users / dao / UserDao,但是.class文件存在于jar文件中。我可以在客户端Web应用程序中看到该特定的自定义jar文件的包和方法。在服务端项目中,我们将其作为客户端应用程序的罐子,maven pom文件具有以下依赖性
groupId-- com.test
artifactId--服务
名称--testServiceGjcp
包装-罐子
版本-1.0.0-BUILD-SNAPSHOT
根据上述依赖项属性groupid,aritfact id和版本,我们在客户端应用程序maven pom.xml文件中将其作为依赖项提供,然后在客户端maven依赖项中添加了生成的服务jar文件并构建了客户端应用程序,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]
处理程序处理失败;嵌套异常是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。路径为[/ SpringSecurity]的上下文中servlet [appServlet]的service()引发异常[处理程序处理失败;嵌套的异常是java.lang.NoClassDefFoundError:com / test / users / dao / UserDao],根本原因是org.apache.catalina.loader.WebappClassLoader.loadClass(网址为org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)的WebappClassLoader.java:1711)com.test.controller的com.test.users.service.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:31) .sun.reflect.NativeMethodAccessorImpl.invoke.MainController.login(MainController.java:53)in sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java :43)在java.lang。
实际上,您真正的问题是java.lang.NoClassDefFoundError: com/test/users/dao/UserDao at com.test.users.service.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:31)
。
我怀疑有ClassLoader问题,例如,如果MyUserDetailsService
和UserDao
分别位于两个不同的Web应用程序中,则它们将位于两个不同的(隔离的)ClassLoader中,这样它们将无法看到彼此。它们需要位于相同的Classloader(根类加载器或Web应用程序类加载器)中,或者UserDao可以位于根类加载器(Webapp类加载器的父calssloader)中,而MyUserDetailsService位于Web应用程序类加载器中
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句