2010-06-09 2 views
0

Donc, je travaille dans Eclipse où tout se compile et fonctionne correctement. Cependant, lors de la compilation sous fourmi pour le serveur de build, un grand nombre de tests échouent avec un NoSuchMethodError disant:NoSuchMethodErrors dit les choses les plus obscures

classe A implémente B
l'interface B étend C
C nécessite méthode getSyncID() // getter standard pour un champ int.
A.java contient getSyncID()
A.class contient getSyncID()

mais l'erreur est encore levée.

Est-ce que quelqu'un sait comment diable cela pourrait arriver? comment le réparer.

Répondre

1

Cela se produit lorsque les fichiers de classe sont désynchronisés; en d'autres termes, l'un a été compilé à une nouvelle version alors qu'un autre ne l'était pas. Essayez de nettoyer et de reconstruire à partir de zéro.

+0

Le compilateur semble ne pas fonctionner correctement. Je peux lancer un test sur les fichiers de classe compilés par ant et ils passent tous et comme je l'ai dit la méthode getSyncID est présente dans les fichiers .class – Keynan

0

Le problème se produit lorsque le chargeur de classe découvre qu'une méthode dans une classe (A) appelle une méthode dans une autre classe (B) qui n'existe pas. La cause première est que la classe B que le chargeur de classe voit est différente de la classe B que le compilateur a vue lors de la compilation A.

La cause la plus fréquente de ce problème est que @MarkPeters dit - que votre ".class" "Les fichiers sont désynchronisés avec les fichiers" .java "et doivent être recompilés à partir de zéro.

Une autre possibilité est que vous ayez une ancienne copie de certains des fichiers ".class" sur le chemin de classe lorsque vous essayez d'exécuter l'application.

Mais de toute façon, vous devez croire le classloader. S'il indique que la méthode n'est pas là, alors il n'est pas là ... dans le fichier ".class" particulier qu'il charge. Si la méthode semble être là dans le fichier ".class", alors c'est la preuve que vous chargez une version différente du fichier plus tôt dans le classpath!

Questions connexes