2016-04-06 23 views
1

maoを使用してdaoおよびモデルパッケージ用の外部カスタマイズjarファイルを作成しました。アクセスするクライアントアプリケーションでjarファイルをインポートしていますdaoメソッドですが、java.lang.NoClassDefFoundError:com/test/users/dao/UserDaoを与えていますが、.classファイルはjarファイルに存在しています。私は、クライアントWebアプリケーション内でその特定のカスタマイズされたjarファイルのパッケージとメソッドを見ることができます。サービス外部カスタマイズされたjarファイルとしてアプリケーションに追加された.classファイルを特定できません

- 私たちは、クライアント・アプリケーションのjarファイルとしてそれを作るしようとしているサービスのサイドプロジェクトでは、 、MavenのPOMファイルが依存

groupId-- com.test

たartifactId次なるさ

名 - testServiceGjcp

包装 - jarファイル

バージョン - 1.0.0-BUILD-SNAPSHOT

上記の依存プロパティーgroupid、アリティファクトID、バージョンから、依存関係としてクライアントアプリケーションmaven pom.xmlファイルで利用可能にした後、生成されたサービスjarファイルをクライアントmaven依存関係の中に追加し、クライアントアプリケーションを構築しました。生成されたjarファイル内の.classファイルを参照することができます。サービスプロジェクト構造で

enter image description here

以下の通りです。しかし、まだ、私たちは、その特定の.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バイオ-8080-EXEC-18]デバッグoswsmmaRequestMappingHandlerMapping - パスのハンドラメソッドを探し/ログイン 11:39:34.481 [HTTPバイオ-8080-exec- 18] DEBUG oswsmmaRequestMappingHandlerMapping - ハンドラメソッドを返す[public org.springframework.web.servlet.ModelAndView com.test.controller.MainController.login(java.lang.String、java.lang.String、javax.servlet.http.HttpServletRequest) [http-bio-8080-exec-18] 11:39:34.481 [http-bio-8080-exec-18] DEBUG osbfsDefaultListableBeanFactory - シングルトンBeanのキャッシュされたインスタンスを返す 'mainController' 11:39:34.481 [http-bio-8080-exec-18] DEBUG os web.servlet.DispatcherServlet - [/ SpringSecurity/login]のLast-Modified値は次のとおりです。-1 11:39:34.543 [http-bio-8080-exec-18] DEBUG o.s.web.servlet.DispatcherServlet - リクエストを完了できませんでした org.springframework.web.util.NestedServletException:ハンドラの処理に失敗しました。入れ子にされた例外はjava.lang.NoClassDefFoundErrorです:com/test/users/dao/UserDao at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259)〜[spring-webmvc-3.2.8.RELEASE。 jar:3.2.8.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)〜[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at org.springframework.web.servlet.FreeServlet.doService(DispatcherServlet.java:856)〜[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at org.springframework.web.servlet.FrameworkServlet。 processRequest(FrameworkServlet.java:953)[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)[spring- webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at j avax.servlet.http.HttpServlet.service(HttpServlet.java:621)[servlet-api。jar:na] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at 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] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)[catalina .jar:7.0.27] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)[catalina.jar:7.0.27] at org.apache.catalina.authenticator.AuthenticatorBase.invoke( AuthenticatorBase.java: 472)[catalina.jar:7.0.27] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)[catalina.jar:7.0.27] at 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] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)[catalina.jar:7.0.27] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)[カタロニア語。 jar:7.0.27] at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)[tomcat-coyote.jar:7.0.27] at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:565)[tomcat-co yote.jar:7.0.27] at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307)[tomcat-coyote.jar:7.0.27] at 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] at java.lang .Thread.run(Thread.java:745)[na:1.7.0_75] 原因:java.lang.NoClassDefFoundError:com/test/users/dao/UserDao at com.test.users.service.MyUserDetailsS​​ervice.loadUserByUsername (MainController.java:53)〜[MainController.class:na] at sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブメソッド)〜[n a:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)〜[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na: 1.7.0_75] java.lang.reflect.Method.invoke(Method.java:606)で 〜[NA:org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.javaで1.7.0_75] 。 215)〜[spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE] at 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] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)〜[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at org。 springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)〜[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at org.springframework.web。 servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)〜[spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE] at 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 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)〜[catalina.jar:7.0.27] at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) )〜[catalina.jar:7.0.27] ... 35の共通フレームが省略されました Apr 16、2016 11:39:34 AM org.apache.catalina.core.StandardWrapperValveが呼び出されました SEVERE:サーブレット用のServlet.serviceパス[/ SpringSecurity]のコンテキスト内の[appServlet]が例外を投げた[ハンドラの処理に失敗しました。ネストされた例外は根本的な原因である java.lang.ClassNotFoundException:com.test.users.dao.UserDao at org.apache.catalina.loader.WebappClassLoaderを持つjava.lang.NoClassDefFoundError:com/test/users/dao/UserDaoです。 loadClass(WebappClassLoader.java:1711)com.test.users.service.MyUserDetailsS​​ervice.loadUserByUsername(MyUserDetailsS​​ervice.java:31)でorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)で でsun.reflectでsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) でsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) でcom.test.controller.MainController.login(MainController.java:53) .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)(InvocableHandlerMethod.java:215) (org.springframework.web.method.support.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.hand org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) でorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) でル(AbstractHandlerMethodAdapter.java:80) で(フレームワーク)。 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) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core。 StandardContextValve.invoke(StandardContextValue.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core。 StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteA dapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:565) org.apache.tomcat.util.netの 。JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:745)

答えて

0

実際、あなたの実際の問題はjava.lang.NoClassDefFoundError: com/test/users/dao/UserDao at com.test.users.service.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:31)です。

私はMyUserDetailsServiceUserDaoは、2つの異なるWebアプリケーションに配置されている場合例えば、彼らはお互いを見ることができないような二つの異なる(隔離)クラスローダになり、クラスローダの問題を疑います。 MyUserDetailsS​​erviceがWebアプリケーションクラスローダー内にあるときに、同じクラスローダー(ルートクラスローダーまたはWebアプリクラスローダー)に配置する必要があります。または、MyUserDetailsS​​erviceがWebアプリケーションクラスローダーにある間に、UserDaoをルートクラスローダー(WebAppクラスローダーの親calssloader)に配置する必要があります。

+0

javaは1つのWebアプリケーションから来ており、UserDaoは他のアプリケーションからのものです。私はUserDaoをjarとして作成し、クライアントWebアプリケーションであるMyUserDetailsS​​erviceで使用できるようにしています。クラスローダの詳細、クラスローダとWebアプリケーションクラスローダ。 – zameer

+0

これは、使用するアプリケーションサーバー/サーブレットエンジンによって異なりますが、たとえばTomcatを使用すると仮定すると、JVMによって提供される基本ランタイムクラス+ $ JAVA_HOME/jre/lib/ext、Systemクラスローダーは、基本的にはCLASSPATHにあるもの、tomcat/libにあるCommonクラスローダー、WEB-INF/classesとWEB-INF/libにあるWebapp Classloaderです。この場合、私がルートクラスローダーと呼ぶのは一般的なクラスローダーなので、UserDaoのjarファイルをtomcat/libに置く必要があります。 –

関連する問題