2014-01-15 42 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