web-dev-qa-db-fra.com

Dans mon projet, j'ai trouvé cette exception org.Eclipse.jdt.internal.compiler.classfmt.ClassFormatException. Comment le résoudre?

org.Eclipse.jdt.internal.compiler.classfmt.ClassFormatException
    at org.Eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.Java:372)
    at org.Apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.Java:232)
    at org.Apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.Java:188)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.Java:113)
    at org.Eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.Java:49)
    at org.Eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.Java:122)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignature(LookupEnvironment.Java:1335)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromVariantTypeSignature(LookupEnvironment.Java:1391)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeArgumentsFromSignature(LookupEnvironment.Java:1172)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignature(LookupEnvironment.Java:1340)
    at org.Eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethod(BinaryTypeBinding.Java:550)
    at org.Eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethods(BinaryTypeBinding.Java:630)
    at org.Eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom(BinaryTypeBinding.Java:365)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.Java:688)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.Java:667)
    at org.Eclipse.jdt.internal.compiler.Compiler.accept(Compiler.Java:296)
    at org.Eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.Java:118)
    at org.Eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.Java:49)
    at org.Eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.Java:122)
    at org.Eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.Java:168)
    at org.Eclipse.jdt.internal.compiler.lookup.Scope.getPackage(Scope.Java:2379)
    at org.Eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.internalResolveLeafType(ParameterizedQualifiedTypeReference.Java:138)
    at org.Eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.internalResolveType(ParameterizedQualifiedTypeReference.Java:132)
    at org.Eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.resolveType(ParameterizedQualifiedTypeReference.Java:351)
    at org.Eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypeFor(SourceTypeBinding.Java:1374)
    at org.Eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.fields(SourceTypeBinding.Java:699)
    at org.Eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.faultInTypesForFieldsAndMethods(SourceTypeBinding.Java:677)
    at org.Eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.Java:469)
    at org.Eclipse.jdt.internal.compiler.Compiler.process(Compiler.Java:756)
    at org.Eclipse.jdt.internal.compiler.Compiler.compile(Compiler.Java:468)
    at org.Apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.Java:459)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:378)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:353)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:340)
    at org.Apache.jasper.JspCompilationContext.compile(JspCompilationContext.Java:646)
    at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:357)
    at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:390)
    at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:728)
    at 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:222)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:123)
    at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:472)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:99)
    at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:931)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:407)
    at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1004)
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:589)
    at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:310)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at Java.lang.Thread.run(Unknown Source)

J'utilise Apache Tomcat/7.0.33, Eclipse-jee-kepler-SR1-RC3-win32

20
user3264898

Merci beaucoup pour les conseils! Couru dans la même erreur ClassFormatException sur Tomcat 6.0.20 et JDK1.8. Jasper-jdt.jar a été remplacé par ecj-4.2.2.jar et tous les JSP qui compilent/fonctionnent à nouveau.

14
M Ali

Le problème est lié à la version ecj (ecj-3.7.2.jar), vous devez utiliser une version plus récente de Tomcat compatible avec jdk8 (Apache-Tomcat-7.0.68 me convient) 

12
hasnae

J'espère que les étapes suivantes vont résoudre votre problème.

1) Arrêtez le Tomcat.

2) Téléchargez ecj-4.2.2.jar dans ce link

3) Copiez ecj-4.2.2.jar dans le dossier lib de Tomcat (exemple: C:\Apache-Tomcat-6.0.36\lib).

4) Renommez ecj-3.7.2.jar en old_ecj-3.7.2.jar.

5) Démarrer le Tomcat.

4
Jar Yit

Si vous utilisez maven et jdk8 pour démarrer Tomcat7, assurez-vous que la version du Tomcat7-maven-plugin est au moins 2.2.

2
Peter Rader

Supprimez les serveurs localhost existants et ajoutez un nouveau serveur. Cela résoudra votre problème.

2
rajeesh

J'avais le même problème lors de l'utilisation de Tomcat 6 avec Java 8. Je l'ai résolu en configurant Tomcat pour qu'il utilise Java 7 au lieu de 8: Ajoutez export Java_HOME=/usr/lib/jvm/Java-7-Oracle dans votre {Tomcat-home}/bin/catalina.sh ou votre script de démarrage personnalisé. 

1
mvdb

Vérifiez votre version de Tomcat.Si votre version de Tomcat 7.0.29 et antérieure est alors Retirez votre ancien Tomcat et téléchargez le dernier. Et lancez le projet https://Tomcat.Apache.org/download-90.cgi

1
ganesh raut

Si vous utilisez Java 8, vous devriez peut-être mettre à jour votre version d'Eclipse.

Eclipse doc

1
dtelaroli

En se basant sur les informations contenues dans la trace de pile, il semble qu’il existe un problème de compilation avec le compilateur Eclipse intégré qu’il utilise plutôt que javac. Toutes les versions Luna d’Eclipse prennent en charge jdk 8, mais comme vous avez mentionné votre utilisation d’Eclipse Kepler, vous devez télécharger un correctif de fonctionnalité de la communauté Eclipse elle-même pour prendre en charge jdk 8.

En attendant, vous pouvez utiliser jdk 7 et recompiler votre projet. Voir si l'erreur disparaît. En dehors de cela, le code me semble bon. J'espère que ça aide. Heureux d'aider.

1
Priyanshu

j'ai également rencontré le même problème après avoir recherché de nombreux articles, j'ai pu trouver cette solution.

quelle version de Tomcat vous utilisez.

Deuxièmement, pour Java 8, vous devez utiliser une version du compilateur Eclipse ECJ prenant en charge Java 8. 

L'exception "ClassFormatException" signifie probablement que votre version d'ECJ ne connaît pas Java 8 du tout.

change la nouvelle version de jre en ancienne version car elle ne prend pas en charge cette version de Tomcat

0
shashigura

Notez que 1. Nous ne pouvons pas mettre à jour la version de la CJE incluse dans Tomcat 6, car Tomcat 6 doit pouvoir s'exécuter sur Java 1.5, mais les versions actuelles de la CJE nécessitent au minimum Java 6.

  1. Vous pouvez remplacer ecj - *. Jar par une version plus récente que vous pourrez télécharger depuis http://www.Eclipse.org/

Consultez les archives de la liste de diffusion Tomcat Users et demandez-lui si vous avez des questions. (Bugzilla n'est pas un forum d'assistance).

  1. Tomcat peut être configuré pour utiliser le compilateur Java javac au lieu d’Eclipse.
0
shashigura

Ce problème est dû à un problème de compatibilité avec jdk, Tomcat et Eclipse . Pour résoudre ce problème, utilisez jdk version 1.8 avec Apache Tomcat 8.0 et la mise à jour d'Eclipse Mars 2.0.

J'ai le même problème avec Apache Tomcat 7.0.

Reconfigurez tout et votre problème sera résolu.

0
Suyash