HTTP 状态 500 - 处理程序处理失败;嵌套异常是 java.lang.NoClassDefFoundError:
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27874095/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError:
提问by Irakli
I'm trying to integrate external jar file into my project. (mambu-models-V3.8.10.jar)
我正在尝试将外部 jar 文件集成到我的项目中。(mambu-models-V3.8.10.jar)
But I receive such error message:
但我收到这样的错误信息:
HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/mambu/loans/shared/model/LoanAccount
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/mambu/loans/shared/model/LoanAccount
org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause:
根本原因:
java.lang.ClassNotFoundException: com.mambu.loans.shared.model.LoanAccount
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2688)
java.lang.Class.getDeclaredMethods(Class.java:1962)
com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:662)
com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:356)
com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:151)
com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:585)
com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:543)
com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:529)
com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:847)
com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:772)
com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:256)
com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205)
com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:853)
com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:967)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1000)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
com.mambu.apisdk.MambuAPIFactory.getLoanService(MambuAPIFactory.java:86)
comm.app.starter.HomeController.Opaaaaana(HomeController.java:167)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
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:781)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Here is my POM xml:
这是我的 POM xml:
http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.springapp kapiv2 war 1.0-SNAPSHOT kapi
http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.springapp kapiv2 war 1.0-SNAPSHOT kapi
<properties>
<spring.version>4.1.1.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>com.mambu</groupId>
<artifactId>mambumodels</artifactId>
<version>3.8.10</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/mambu-models-V3.8.10.jar
</systemPath>
<optional>false</optional>
</dependency>
<!-- <dependency>
<groupId>com.cenqua.clover</groupId>
<artifactId>clover</artifactId>
<version>3.0.2</version>
</dependency>-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
<optional>false</optional>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
<scope>compile</scope>
<optional>false</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<optional>false</optional>
</dependency>
<dependency>
<groupId>javax.jdo</groupId>
<artifactId>jdo-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<optional>false</optional>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
<optional>false</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>2.7.0</version>
</dependency>
<!-- <dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>1.5.3</version>
</dependency>-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.Hymanson.core</groupId>
<artifactId>Hymanson-databind</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>kapi</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
There are a lot of results in google if you search NoClassDefFoundError - but none of them hellped me.
如果您搜索 NoClassDefFoundError,在 google 中有很多结果 - 但没有一个让我感到困扰。
could you please tell me why I receive such error? thanks
你能告诉我为什么我会收到这样的错误吗?谢谢
采纳答案by Irakli
The problem was that jar file that was needed for running this function was missing in run time. So I added this to MAVEN
问题是运行此函数所需的 jar 文件在运行时丢失。所以我把这个加到了 MAVEN
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/myTESTapplication/WEB-INF/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
回答by mico
You add the dependency in system scope. That means, when you code the app your ide will have it nicely there as dependency, but when running the code, the server should have it under classpath or some lib folder before it finds the dependency to run correctly. In this scope maven and tomcat don't do any tricks on your behalf.
您在系统范围内添加依赖项。这意味着,当您编写应用程序时,您的 ide 将很好地将其作为依赖项存在,但是在运行代码时,服务器应该将它放在类路径或某个 lib 文件夹下,然后才能找到正确运行的依赖项。在这个范围内,maven 和 tomcat 不会代表你做任何把戏。
http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.htmlis tomcat reference about classpath and it suggests WEB-INF/lib for the jar location under your webapp, when system scope is used. If you do want use the maven to provide the class for you, you should use compile target and have a repo for providing the jar for you. More at java.lang.NoClassDefFoundError: in eclipse maven.
http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html是关于类路径的 tomcat 参考,它建议使用 WEB-INF/lib 作为您的 webapp 下的 jar 位置,当使用系统范围时。如果你确实想使用 maven 为你提供类,你应该使用 compile 目标并有一个 repo 为你提供 jar。更多在java.lang.NoClassDefFoundError: in eclipse maven。
回答by kiwiron
The problem may not be that the class is missing - it may be present, but failed to initialise correctly. e.g. An exception occurred in a static code block.
问题可能不在于该类丢失 - 它可能存在,但未能正确初始化。例如,在静态代码块中发生异常。
This answer explains it well Why am I getting a NoClassDefFoundError in Java?
这个答案很好地解释了为什么我在 Java 中得到 NoClassDefFoundError?