85 votes

Java : Problème de compilation non résolu

Quelles sont les causes possibles d'une erreur "java.lang.Error : Problème de compilation non résolu" ?

Informations complémentaires :

J'ai constaté ce phénomène après avoir copié un ensemble de fichiers JAR mis à jour à partir d'une compilation sur les fichiers JAR existants et après avoir redémarré l'application. Les JAR sont construits à l'aide d'un processus de construction Maven.

Je m'attendrais à voir apparaître des erreurs de type LinkageErrors ou ClassNotFound si les interfaces étaient modifiées. L'erreur ci-dessus indique un problème de niveau inférieur.

Une reconstruction et un redéploiement propres ont permis de résoudre le problème. Cette erreur pourrait-elle indiquer un JAR corrompu ?

70voto

(réécrit le 2015-07-28)

Le comportement par défaut d'Eclipse lors de la compilation d'un code contenant des erreurs est de générer un code d'octets lançant l'exception que vous voyez, ce qui permet d'exécuter le programme. Ceci est possible car Eclipse utilise son propre compilateur intégré, au lieu de javac du JDK qu'Apache Maven utilise, et qui fait échouer complètement la compilation pour cause d'erreurs. Si vous utilisez Eclipse sur un projet Maven avec lequel vous travaillez également en utilisant la ligne de commande mvn cela peut se produire.

Le remède consiste à corriger les erreurs et à recompiler, avant d'exécuter à nouveau le programme.

Le paramètre est marqué d'une boîte rouge dans ce screendump :

Eclipse Preferences under OS X

16voto

micahli123 Points 152

Essayer de nettoyer le projet eclipse

11voto

jaideep Points 407

Il suffit d'essayer de nettoyer maven par commande

mvn clean

et ensuite la commande suivante

mvn eclipse:clean eclipse:eclipse

et reconstruire votre projet....

8voto

Steve Pearson Points 31

Il se peut que vos classes compilées doivent être recompilées à partir des sources avec les nouveaux bocaux.

Essayez de lancer "mvn clean" puis de reconstruire.

3voto

Stephan Herrmann Points 1860

Thorbjørn Ravn Andersen a répondu correctement à la majeure partie de la question.

Cette réponse tente de faire la lumière sur la question restante : comment le fichier de classe contenant des erreurs a-t-il pu se retrouver dans le fichier jar ?

Chaque build (Maven & javac ou Eclipse) signale de manière spécifique lorsqu'il rencontre une erreur de compilation, et refusera de créer un fichier Jar à partir de celui-ci (ou au moins vous alertera de manière proéminente). La cause la plus probable de l'inclusion silencieuse de fichiers de classe contenant des erreurs dans un jar est le fonctionnement simultané de Maven et d'Eclipse.

Si vous avez Eclipse ouvert pendant que vous exécutez un build mvn, vous devez désactiver Projet > Construire automatiquement jusqu'à ce que mvn ait terminé.

EDIT : Essayons de diviser l'énigme en trois parties :

(1) Quelle est la signification de "java.lang.Error : Compilation non résolue non résolu"

C'est ce qu'a expliqué Thorbjørn Ravn Andersen. Il ne fait aucun doute qu'Eclipse a trouvé une erreur au moment de la compilation .

(2) Comment un fichier de classe compilé par Eclipse peut-il se retrouver dans un fichier jar créé ? par maven (en supposant que maven est no configuré pour utiliser l'ecj pour compilation) ?

Cela peut se produire en invoquant Maven sans nettoyage ou avec un nettoyage incomplet. Ou bien, une compilation automatique d'Eclipse pourrait réagir aux changements dans le système de fichiers (effectués par Maven) et recompiler une classe, avant Maven procède à la collecte des fichiers de classe dans le fichier jar ( c'est ce que j'entendais par "opération concurrente" dans ma réponse initiale ).

(3) Comment se fait-il qu'il y ait une erreur de compilation, mais qu'il n'y ait pas d'erreur de compilation ? mvn clean réussit ?

Là encore, plusieurs possibilités : (a) les compilateurs ne sont pas d'accord sur la légalité du code source, ou (b) Eclipse compile avec des paramètres erronés tels qu'un classpath incomplet, une mauvaise conformité Java, etc. Quoi qu'il en soit, une séquence d'actualisation et de compilation propre dans Eclipse devrait faire apparaître le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X