2016-02-24 1 views
0

Obtention et NoClassDefFoundError et ClassNotFoundException dans une application Java Spring MVC, bien que cela puisse se produire dans n'importe quelle application Java. La classe en question est importée d'un autre projet via un fichier JAR de l'assembly de déploiement. J'ai essayé toutes sortes de rafraîchissement et de nettoyage dans le livre, le problème a persisté.Fichier jar de l'assembly de déploiement Eclipse - NoClassDefFoundError & ClassNotFoundException

Ce problème a commencé lors de la mise à niveau d'Eclipse Luna vers Eclipse Mars. Le projet en question a été créé sous Luna. Un collègue qui a commencé frais avec Mars le voit aussi bien. Pour lui, le projet a été importé de Git dans son incarnation Luna.

Je suis allé jusqu'à complètement effacer mon installation Eclipse, les dépôts git (client), tout, et à réimporter depuis github, en commençant par tout recommencer. Rafraîchir, nettoyer tout, le problème persiste! Ce même projet fonctionnait bien depuis des mois, même si je me souviens avoir vu un problème similaire il y a longtemps, mais il a été rapidement corrigé en ajoutant l'entrée de projet dans l'assemblage de déploiement. Dans mon cas, j'ai cru voir que le fichier jar était en cours de déploiement, mais j'ai été induit en erreur parce que je regardais sous/Applications/tomcat (Mac). L'emplacement de déploiement réel est (encore sur mon Mac): $HOME/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps

Voir ci-dessous pour texte d'erreur complet.

Feb 22, 2016 2:30:41 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [pvhub] in context with path [/mysolarhub] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/laplace/collector/ArchAPI] with root cause 
java.lang.ClassNotFoundException: com.laplace.collector.ArchAPI 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
at com.laplace.solarhub.controllers.ProjectsController.showMonitoring(ProjectsController.java:501) 
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.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

Gary

Répondre

0

Je résolu ce problème. Je poste la question et la réponse au cas où cela aiderait quelqu'un d'autre. J'ai lu des dizaines d'articles sur SO et de nombreux autres forums, dont aucun n'a abordé le problème tel que je l'ai rencontré.

J'ai reconstruit le projet de dépendance (Deployment Assembly .jar) à partir de zéro sous Mars. Je pense que la structure du projet prévue sous Mars est différente. L'ancien projet (créé sous Luna) avait un répertoire source principal qui apparaissait comme "src/main/java" dans le répertoire principal du projet. Le même projet créé sous Mars montre juste "src" au même endroit. Mars se plaignait de la structure de l'arborescence des sources tout de suite quand je suis passé de Luna à celle-ci. J'ai corrigé les erreurs dont il se plaignait, mais ce n'était apparemment pas toute l'étendue des problèmes.

+0

Si elle affiche simplement 'src' au lieu de 'src/main/java', eclipse ne reconnaît pas correctement le chemin de compilation. Cliquez avec le bouton droit sur le dossier java et cliquez sur 'Add to buildpath' – nbrooks

+0

D'après votre réponse, il semblerait que vous ayez installé des plug-ins Eclipse Maven dans Luna, mais pas Mars, ou que le projet a été importé différemment pour ne pas être déclenché sous Mars. Les plug-ins m2e-wtp gèrent normalement le pontage des deux configurations correctement. – nitind

+0

Merci. En fait, j'ai tous les plug-ins Maven installés sous Mars. Une chose que j'ai faite aujourd'hui a été de reconstruire le projet encore cette fois-ci en commençant par un projet Maven. Tout semble fonctionner de manière plus cohérente de cette façon. Avant de créer un projet Java classique, puis de le convertir (Projet -> Configurer -> Convertir en projet Maven). Il affiche maintenant le dossier source principal en tant que "src/main/java" à nouveau. –