2010-03-18 6 views
136

Je reçois cette erreur lorsque j'inclue une bibliothèque opensource que j'ai dû compiler depuis la source. Maintenant, toutes les suggestions sur le web indiquent que le code a été compilé dans une version et exécuté dans une autre version (nouveau sur l'ancien). Cependant, je n'ai qu'une version de JRE sur mon système. Si je lance les commandes:java.lang.UnsupportedClassVersionError: Numéro de version incorrect dans le fichier .class?

$ javac -version 
javac 1.5.0_18 

$ java -version 
java version "1.5.0_18" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02) 
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode) 

et vérifier dans Eclipse pour les propriétés de la bibliothèque java, je reçois 1.5.0_18

Par conséquent, je dois conclure quelque chose d'autre, interne à une classe elle-même, est de lancer la exception?? Est-ce que c'est possible?

+2

avez-vous d'abord une version compilée de la bibliothèque qui pourrait être sur votre classpath? –

+0

Bonne idée, mais non. J'ai fait un contrôle en utilisant 'trouver. -name '* .jar' | xargs locate 'du dossier lib avec les fichiers JAR. D'ailleurs, je ne pensais pas que Eclipse utilisait CLASSPATH? D'autres bonnes suggestions? –

+0

comment utiliser cette commande find -name '* .jar' sur cmd comme je cherche à reconstruire le code jre src encore ... et pour cela je dois tirer ce cmd ..... http: // www. javalobby.org/java/forums/t103334.html.....my jdk est à C: \ Program Files \ Java \ jdk1.6.0_31 –

Répondre

183

J'ai appris que les messages d'erreur comme celui-ci sont généralement corrects. Quand il ne pouvait pas POSSIBLEMENT (dans votre esprit) être ce que dit l'erreur signalée, vous allez chercher un problème dans une autre zone ... seulement pour découvrir des heures plus tard que le message d'erreur original était en effet correct.

Depuis que vous utilisez Eclipse, je pense que Thilo l'a raison La raison la plus probable pour laquelle vous recevez ce message est que l'un de vos projets compile 1.6 classes. Peu importe si vous avez seulement 1.5 JRE sur le système, car Eclipse a son propre compilateur (pas javac), et n'a besoin que d'un 1.5 JRE pour compiler des classes 1.6. Cela peut être bizarre, et un paramètre doit être décoché pour permettre ceci, mais j'ai juste réussi à le faire.

Pour le projet en question, vérifiez la section Propriétés du projet (généralement Alt + Entrée), Java Compiler. Voici une image d'un projet configuré pour compiler 1.6, mais avec seulement 1.5 JRE.

enter image description here

+0

Tout à fait d'accord ... c'est pourquoi j'ai demandé, dans mon commentaire, la question des moyens de mettre en évidence.Je ne connaissais pas les classes internes d'Eclipse. La bibliothèque a été compilée en ligne de commande avec 'javac' et intégrée dans mon projet Eclipse. Je vais essayer de compiler mon projet à partir de la ligne de commande. Vous avez clairement résolu ce problème dans le passé et vos suggestions sont fantastiques. –

+3

Si vous avez le JDK (qui a des sources), vous devriez être capable d'ajouter quelques points d'arrêt dans Eclipse et espérer voir quelle classe il essaie de charger. Le plus simple est probablement un point d'arrêt dans le constructeur pour UnsupportedClassVersionError (ou un point d'arrêt Eclipse Exception, l'icône 'J!'), Alors vous pouvez inspecter comment il est arrivé là. –

+0

OK. J'ai trouvé un expert dans le bâtiment et il a été capable de pointer Eclipse vers le même JRE que ma ligne de commande. J'ai alors reconstruit contre 1.6 et couru contre 1.6 et tout fonctionne. Évidemment, j'avais tort de n'avoir rien d'autre que 1.5. Il m'a montré où regarder. Merci pour l'aide - maintenant je suis à mon prochain problème! :) –

5

Avez-vous compilé avec Eclipse? Il utilise un compilateur différent (pas javac). Cela ne devrait pas entraîner cette erreur (si tout est configuré correctement), mais vous pouvez essayer de le compiler avec javac à la place. Si cela corrige le problème, essayez de voir si Eclipse a des paramètres de compilation incorrects. Plus précisément, ciblez Java 5.

+0

C'est ce que j'apprends. Je vais essayer de construire les deux pièces de la même façon (ligne cmd et/ou éclipse). –

+1

Merci Thilo, j'ai beaucoup appris aujourd'hui sur Eclipse et Java et les versions de classe. Et un peu de * ant * aussi. –

8

Avez-vous essayé de faire un "nettoyage" complet, puis de le reconstruire dans Eclipse (Projet-> Nettoyer ...)?

Etes-vous capable de compiler et de lancer avec "javac" et "java" directement à partir de la ligne de commande? Est-ce que cela fonctionne correctement?

Si vous faites un clic droit sur votre projet, allez dans "Propriétés", puis allez dans "Java Build Path", y a-t-il des entrées suspectes sous l'un des onglets? Ceci est essentiellement votre CLASSPATH.

Dans les préférences Eclipse, vous pouvez également vérifier la section "JRE installés" dans la section "Java" et vous assurer qu'elle correspond à ce que vous pensez qu'elle devrait être.

Vous avez certainement un fichier .class obsolète qui traîne quelque part ou vous obtenez une incompatibilité de compilation/temps d'exécution dans les versions de Java que vous utilisez.

+0

oui (nettoyage complet); ne l'ai pas essayé (projet de ligne cmd); peut-être/non (j'ai supprimé les entrées d'Eclipse "Java Build Path"); fait cela (JREs - c'est là que j'ai eu la version #). –

0

Un autre scénario où cela pourrait se produire est lorsque vous lancez une instance d'Eclipse (pour le débogage, etc.) à partir d'une éclipse hôte - auquel cas, modifier le niveau du projet ou de la bibliothèque JRE sur le classpath du projet seul n'aide pas. Ce qui compte, c'est l'environnement JRE utilisé pour lancer l'environnement d'éclipse cible.

1

Vérifiez également tous les fichiers jar de votre projet qui ont été compilés pour une version supérieure de Java.Si ce sont vos propres bibliothèques, vous pouvez résoudre ce problème en modifiant l'attribut version cible javac

<javac destdir="${classes.dir}" 
      debug="on" classpathref="project.classpath" target="1.6"> 
0

Contrôlez toujours trop évident. J'ai eu cette erreur une fois quand j'ai accidentellement attrapé la mauvaise ressource pour l'action d'ajout et de suppression du serveur. Cela peut être facile à oublier.

0

La suppression des fichiers de paramètres spécifiques au projet (espace de travail Eclipse/dossier de projet/.settings /) à partir du dossier de projet sera également utile. Évidemment, nous devons faire un projet propre et construire après la suppression.

2

J'ai également eu la même erreur. Raison pour cela je compilais le projet en utilisant Maven. J'avais JAVA_HOME pointant vers JDK7 et donc java 1.7 était utilisé pour la compilation et lors de l'exécution du projet j'utilisais JDK1.5. Modification de l'entrée ci-dessous dans le fichier .classpath ou modification dans l'éclipse comme dans la capture d'écran résolu le problème.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5 

ou changement dans la gestion configuarions d'éclipse comme enter image description here

0

changer le projet d'utiliser Java 1.7: Pour que cela fonctionne suivre les étapes suivantes:

  • changement compilateur Conformité Niveau
  • Modifier vos projets JRE/JDK à quelque chose du même niveau (1,7 dans mon cas)
  • Faire le même changement dans tous les projets référencés par votre projet
  • Changer votre course/configuration de débogage pour utiliser JRE/JDK (ou du même niveau)

ne fonctionne pas?

  • projets de suppression de Bin
  • Clean
  • Reconstruire

ne fonctionne toujours pas?

dans votre répertoire de projet: modifier les .settings/org.eclipse.jdt.core.prefs> assurez-vous que votre niveau cible est appliqué

Bonne chance!

Questions connexes