2014-01-15 30 views
2

我明白错误是什么:有一个类不是调用者期望的jar。我的问题是,错误不告诉我在我的依赖树中的有问题的类或jar。我会告诉你一些关于我的项目,然后我会发布错误本身。再次,我主要试图学习如何调试这样的错误。解决这个问题对我来说是一种奖励。是否有WAR文件的运行时分析工具?我错过了哪些错误?如何在Java War项目(泽西岛)中调试IncompatibleClassChange错误?

项目 这是泽西岛项目,运行在Tomcat上。我正在使用eclipse进行开发。这也是一个Maven项目。它依赖于另一个项目,这是我们的项目之一。挖掘之后,似乎冲突与我们项目的一个子依赖关系。

错误

Jan 15, 2014 9:47:21 AM org.apache.catalina.core.ApplicationContext log 
SEVERE: StandardWrapper.Throwable 
java.lang.IncompatibleClassChangeError: Implementing class 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2918) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
    at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875) 
    at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840) 
    at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144) 
    at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 

Jan 15, 2014 9:47:21 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Allocate exception for servlet Jersey Web Application 
java.lang.IncompatibleClassChangeError: Implementing class 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2918) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
    at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875) 
    at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840) 
    at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144) 
    at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 

回答

1

这也是一个Maven项目。它依赖于另一个项目 ,这是我们的项目之一。挖掘后,似乎冲突是 与我们的项目的子依赖项。

检查您的所有项目是否使用相同版本的泽西岛和您的项目使用的任何其他主要框架的相同版本。在Eclipse中使用Maven依赖关系分析工具来显示WAR中包含哪些JAR以及哪些依赖声明导致JAR被包含。

您可能需要在POM中添加排除项以修复问题。例如,以便一些辅助依赖不会引入Jersey的过时版本。

是否有WAR文件的运行时分析工具?

您可以将-verbose:class添加到Java选项中,以便在加载类和JAR时打印输出。

+0

由于您的努力和我们的建议,我将对此进行回答。但是,即使完全使用M2Eclipse的依赖查看器并进行排除,也会发生此错误。问题出在班级而不是罐子级别。感谢您的帮助。 – mcsilvio

+0

你是否能够得到-verbose:班级工作?它窒息在哪一类? –

+0

还没有试过。将能够尽快。我会在这里发布结果。今天或明天。 – mcsilvio