2010-04-15 5 views
3

J'ai 2 projets liés et ces 2 projets ont chacun un paquet sous eux.Java Package, Project, NoSuchMethod erreur

XProjet -> XPackage -> XClass -> X1Method(); X2Method();

YProjet -> YPackage -> YClass -> Y1Méthode(); J'essaie d'appeler les méthodes X1 et X2 à partir de la méthode Y1. Je peux appeler la méthode X1 mais quand j'appelle la méthode X2 j'obtiens une erreur d'exécution (java.lang.NoSuchMethodError :)

Toutes les méthodes sont publiques et il n'y a rien de mal avec les noms de méthodes. Il est juste absurde d'avoir l'un d'entre eux travaille alors que d'autres donne des erreurs d'exécution.

Toute aide serait appréciée. Merci.

+1

Quel est votre système de construction? Est-il possible que vous construisiez une ancienne version de XClass? –

+0

Pourriez-vous poster un exemple de code pour illustrer le problème? – Poindexter

+0

J'utilise tomcat 6.0 comme serveur d'application. Développer sur Eclipse avec JavaEE. – aykut

Répondre

0

Il est très probable que vous compiliez une classe .class de XClass dans votre classpath. Mais l'exécution (projet probablement lié) a une version différente de XClass. Ceci est spécifique à l'environnement. Vous devez voir quels artefacts sont dans votre chemin de classe pendant la compilation et ce qui est récupéré pendant l'exécution;

Comme commenté par d'autres. Les détails concernant votre système IDE/Build ou même le code est nécessaire pour répondre davantage.

1

De l'java.lang.NoSuchMethodError javadoc:

Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.

Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.

En d'autres termes, le classpath d'exécution ne contient pas la classe avec la méthode desied, alors qu'il était disponible dans le classpath compiletime. Récapitulatif: votre classpath est foiré. Nettoyez et alignez-le. Comment le faire exacly dépend de votre environnement.

Mise à jour: Ainsi, il s'agit d'une application Web Java EE dans Eclipse? Si l'on suppose que l'un est un Dynamic Web Project et l'autre est un dans les propriétés du projet normale Projet Java, du projet Web dynamique vous devez ajouter le Java Project normale dans le chemin de générationet les dépendances du module Java EE .

Si cela ne résout pas le problème, il est probable que le classpath par défaut du serveur d'applications ou du JRE soit sale. Vous devrez supprimer toutes les bibliothèques inutiles liées au projet de JRE/lib, JRE/lib/ext et Tomcat/lib et vous promettre que vous ne touchez plus à ces chemins de bibliothèque;)

+0

J'utilise tomcat 6.0 avec eclipse. pouvez-vous m'aider à le faire? – aykut

+0

Vous avez raison, c'est une application Web JavaEE. Y projet est Dynamic Web Application X est un projet Java normal. Projet Web dynamique a projet X dans son chemin de génération. Je ne connais pas les dépendances de modules mais cela fonctionnait avec juste le chemin de compilation. Après avoir inséré de nouvelles fonctionnalités, ils ne travaillaient pas. Existe-t-il un moyen de dire à tomcat d'utiliser la dernière version du projet X? – aykut

+0

Cela fonctionne est probablement une mauvaise interprétation ou un chemin de classe foiré.Ajoutez-le aux * dépendances du module Java EE *, c'est la seule bonne façon. Cependant, je revérifierais si vous n'avez pas mis inutilement des bibliothèques "non pertinentes" dans le classpath de JRE et Tomcat. – BalusC

Questions connexes