8
votes

Eclipse ne compilera pas, dossier de la classe mauvaise, une mauvaise version

J'essaie de compiler le code vérifié de SVN d'un autre développeur. Eclipse m'a donné beaucoup de problèmes ces derniers temps.

Voici mes paramètres spécifiques au projet: texte alt p>

C'est ce que la section Compiler de mon fichier de fourmis: p>

compile:
    [javac] Compiling 3 source files to H:\MYCOMPANY\portlets\build
    [javac] H:\MYCOMPANY\portlets\src\com\mycompany\portlets\CourseList.java:3: cannot access java.io.IOException
    [javac] bad class file: C:\Program Files\Java\jre1.6.0_07\lib\rt.jar(java/io/IOException.class)
    [javac] class file has wrong version 49.0, should be 48.0
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
    [javac] import java.io.IOException;
    [javac]                ^
    [javac] 1 error


0 commentaires

9 Réponses :


3
votes

Fichier de la classe Bad: C: \ Program Files \ Java \ Jre1.6.0_07 \ LIB \ RT.JAR (Java / Io / IOException.class) Le fichier de classe a une mauvaise version 49.0, devrait être 48.0

Il dit que le fichier de classe mentionné a été compilé à l'aide d'un compilateur qui génère des fichiers de classe de la version 49.0, tandis que la fourmi s'attend à ce qu'il soit compilé à l'aide d'un compilateur qui génère des fichiers de classe de la version 48.0. Étant donné que la classe en question fait partie de la JRE, vous devez mettre à jour la catégorie de classe dans votre build.xml pour inclure les fichiers de classe contenant JRE de la version 48.0.


3 commentaires

Umm, Java 6 a la version de la classe de classe de 50.0.


@Vineet: Hmm, tu as raison. Je traduisais simplement du message d'erreur. Mais cela n'explique pas pourquoi ioexception.class dans jre 1.6 a la version 49.0 comme indiqué dans le message d'erreur? Quoi qu'il en soit, j'ai généré ma réponse pour supprimer les versions de Jre spécifiques.


Hmm, intéressant ... J'ai vérifié des cours dans les 1,5 et 1.6 JRE RT.JAR (y compris ceux spécialement mis à jour en 1.6) et ils ont tous la version 49. Je me demande à quel point est..



2
votes

Vous semblez exécuter une fourmi avec une version 1.5 Java Compiler, mais la compilation des bibliothèques de classe (Rt.jar) d'une installation 1.6. Vous devez configurer votre build.xml de manière à utiliser systématiquement (le compilateur et les bibliothèques de classe) de la même version Java.


2 commentaires

Cela pourrait être le problème, où dois-je préciser cela? Dans la construction de fourmis, devrais-je ajouter cible = "1.5" Source = "1.5" à la commande Compiler?


C'est dans vos "configurations d'outils externes", c'est-à-dire par lance-ant. Vérifiez surtout les onglets JRE et CLASSPATH. Le problème est probablement dans le paramètre JRE, mais vous avez peut-être ajouté manuellement une version différente de la Rt.jar à la classe de classe.



13
votes

La version du fichier de classe de 49.0 appartient à Java 1.5.x, tandis que celui de 48,0 appartient à l'une des versions Java 1.4.x. La structure de classe de classe avait changé en 1.5 en raison de l'introduction de plusieurs nouvelles fonctionnalités et des modifications apportées dans la spécification de langue Java.

De l'erreur, on peut en déduire qu'un fichier de classe Java 1.4 était attendu, alors qu'un fichier de classe Java 1.5 a été trouvé. Il semble que le compilateur soit un compilateur Java 1.4, vous devez donc essayer de vérifier si vous utilisez la version appropriée du compilateur Java et la bonne JDK (c'est-à-dire la maison JDK).

addendum

Ant a tendance à rechercher l'exécutable Javac dans le Java_Home / Bin / Javac $. Si la variable d'environnement Java_Home a été mal définie, dites à une maison Java 1.4, alors il est probable que l'erreur décrite est une erreur décrite même dans Eclipse.

addendum n ° 2

L'ajout d'entrées à la variable d'environnement de chemin pourrait résulter dans la modification du comportement de recherche de la fourmi, éventuellement entraînant un autre outil.jar utilisé dans le but de compiler les sources. Cela pourrait être dû à la JVM.DLL à partir de l'installation JRE 1.4.2 étant utilisée pour exécuter Eclipse (et donc fourmi).


5 commentaires

Comment vérifier la version du compilateur d'Ant?


Eh bien, par défaut, cela a tendance à être la version du compilateur dans la maison JDK (la configuration de lancement Eclipse peut aider à identifier la maison). Vous pouvez spécifier un autre compilateur à l'aide de l'attribut exécutable de la tâche Javac Ant: anth.apache. org / manuel / tâches / javac.html


Je ne comprends pas, j'utilise Java 1.6 JDK. J'ai ajouté une capture d'écran à mon post. Pourquoi cela devrait-il importer?


Vous utilisez JDK 1.6 pour appeler la fourmi, mais le compilateur est appelé par ANT dans un nouveau processus qui peut utiliser un autre JDK


Java_Home est défini correctement sur C: \ Program Files \ Java \ JDK1.6.0_07 Cependant, Oracle Dev Suite a ajouté des valeurs JRE 1.4 à ma variable d'environnement de chemin.



3
votes

Tout d'abord, les paramètres de votre projet n'ont rien à voir avec votre script de construction. Les paramètres du projet vous indiquent comment Eclipse construit votre projet et non comment fonctionnera votre fichier de fourmis.

Pour trouver sous lequel JVM Ant est exécutée, souris droite, cliquez sur votre script de construction dans Eclipse et choisissez "Exécuter comme ...". Dans la boîte de dialogue PopUP, naviguez jusqu'à JVM TAB et vérifiez quel JRE est utilisé pour exécuter votre script.


2 commentaires

Cela a aidé un peu. Il n'y a pas d'onglet JVM, mais l'onglet JRE utilise correctement JRE1.6.0_07.


Désolé, je n'ai pas eu d'éclipse ouverte et n'a donné un nom d'onglet incorrect. Eh bien, ensuite je vérifierais: 1. Si vous avez installé JRE 1.4. 2. Si vous avez JAVA_HOME ou JRE_HOME défini, et si oui, où ils pointent. 3. Exécutez Java -Version de la ligne de commande pour voir quel Java votre chemin pointe sur. S'il est 1.4, ajustez votre environnement de chemin pour pointer vers 1.6.



0
votes

Peut-être que vous devez utiliser JDK JRE qui est situé à C: \ Program Files \ Java \ JDK \ JRE, non publique


0 commentaires

1
votes

Vous pouvez essayer de copier outils.jar à partir de jdk / jre à commun / lib de tomcat.

Cela a fonctionné pour moi, comme démontré ici


0 commentaires

2
votes

Le message d'erreur signifie que l'outil Compiler inclus dans l'outil.jar Votre fourmi utilise est de la version plus ancienne que la classe tente de compiler. Message "[Javac] Class Fichier a une mauvaise version 50.0 devrait être 49.0" signifierait que votre fichier de classe a besoin de JDK 6.0 mais votre outil.jar provient de la distribution JDK 5.0. Pour passer à des outils corrects.jar dans Eclipse Ouvrir la fenêtre> Préférences> Ant> Runtime> Entrées globales.


0 commentaires

0
votes

Vous devez également modifier la version Java pour ANT, car si vous utilisez votre environnement d'exécution en tant que JDK1.8, votre fourmi doit également être signalée vers la même version ou la même fourmi doit référer des outils.jar Fichier de JDK1.8 / LIB /tools.jar Lieu. Pour résoudre ce problème, votre éclipse aller à la fenêtre -> Préférence -> Ant -> Runtime -> Entrées globales. Cherchez ici et mettez à jour les outils.jar Chemin avec la dernière version ci-dessous. C: \ Program Files \ Java \ JDK1.8.0_60 \ LIB \ TOOLS.JAR

puis exécutez votre problème de script de construction sera résolu. :)


0 commentaires

0
votes

Modification des outils.jar Dans Eclipse vers la version correcte, corrigez-la. J'utilisais JRE 1.6 et j'ai dû le modifier pour utiliser 1.8 pour obtenir le fichier de classe dans la version 52.


0 commentaires