Erreur Eclipse: référencé indirectement à partir des fichiers .class requirejs?

J’ai eu une erreur dans Eclipse. Que signifie ce message d’erreur:

The type iglu.ir.TermVector cannot be resolved. It is indirectly referenced from required .class files 

Cela signifie: “Une classe que vous utilisez a besoin d’une autre classe qui n’est pas sur le classpath.” Vous devriez vous assurer (comme le suggère Harry Joy) d’append le bocal requirejs au classpath.

Il est tout à fait probable qu’Eclipse soit confus car il s’agit d’une erreur réelle. J’ai ignoré l’erreur et j’ai exécuté le service Web dont endpointInterface se plaignait, et il fonctionnait correctement, à l’exception de devoir gérer la boîte de dialog chaque fois que je voulais l’exécuter. Juste une autre erreur opaque qui ne me dit rien.

Cela m’arrive parfois, j’ai toujours corrigé cela avec la commande “mvn eclipse: clean” pour nettoyer les anciennes propriétés et ensuite exécuter mvn eclipse: eclipse -Dwtpversion = 2.0 (pour un projet web bien sûr). Il y a quelques vieilles propriétés enregistrées, donc l’éclipse est parfois confuse.

Il semble que ce soit un problème connu (bogue 67414) qui a été résolu dans la version 3.0 … quelqu’un a fait remarquer que cela se produisait également dans la version 3.4.

En attendant, le travail consiste à supprimer la bibliothèque système JRE du projet, puis à la rappend.

 Here are the steps: 

Accédez aux propriétés du projet avec l’erreur de construction (clic droit> Propriétés)

Voir l’onglet “Bibliothèques” dans la section “Construire le chemin”

Recherchez la “bibliothèque système JRE” dans la liste (si cela manque, ce message d’erreur n’est pas un bogue eclipse mais un projet mal configuré)

Supprimer la “bibliothèque système JRE”

Cliquez sur “Ajouter une bibliothèque …”, sélectionnez “Bibliothèque système JRE” et ajoutez le JRE approprié pour le projet (par exemple, “JRE par défaut de l’espace de travail”).

Appuyez sur “Terminer” dans la sélection de la bibliothèque et sur “OK” dans les propriétés du projet, puis attendez la reconstruction du projet.

Espérons que l’erreur sera résolue …

J’ai eu cette erreur à cause d’un référentiel Maven local corrompu .

Donc, pour résoudre le problème, tout ce que j’avais à faire était d’aller dans mon référentiel et de supprimer le dossier où se trouvait le fichier .jar, puis de forcer un update maven dans Eclipse.

Cette erreur se produit lorsque les classes du fichier JAR ne suivent pas la même structure que la structure de dossiers du fichier jar.

Par exemple, si le fichier de classe a le package com.test.exam et que le fichier classes.jar créé à partir de ce fichier de classe a une structure test.exam …, une erreur sera générée. Vous devez corriger la structure du paquet de vos classes.jar et l’inclure ensuite dans le chemin de compilation ecplipse …

Si vous ne trouvez toujours rien de mal dans votre configuration, vous pouvez essayer Projet -> Nettoyer et nettoyer tous les projets dans l’espace de travail.

EDIT: Désolé, n’a pas vu la suggestion de verbose_mode … même chose

J’ai eu cette exception parce que eclipse travaillait dans une version différente de jdk, juste changé à la bonne, propre et construit et travaillé!

Pour moi, cela se produit lorsque je mets à niveau mon jdk au 1.8.0_60 avec mon ancien jeu de pots utilisé depuis longtemps. Si je reviens à jdk1.7.0_25, tous ces problèmes ont disparu. Il semble y avoir un problème de compatibilité entre JRE et les bibliothèques.

J’ai eu l’erreur lorsque je changeais simplement certains parameters svn et rien dans le code. Le simple nettoyage des projets a corrigé l’erreur.

Dans mon cas, j’ai créé un projet et rendu ses minSdkVersion=9 et targetSdkVersion=17 . J’ai utilisé automatiquement libs/android-support-v4.jar . J’ai également dû utiliser ActionBarActivity utilisant android-support-v7-appcomapt.jar . Je viens donc de copier le fichier android-support-v7-appcompat.jar dossier android-sdk/extras/andrid/support/v7/appcompat/libs et de le coller dans mon dossier de libs projets. Et cela a causé l’erreur ci-dessus. Donc, en gros, je devais aussi placer le fichier android-support-v4.jar depuis android-sdk/extras/andrid/support/v7/appcompat/libs dans le dossier libs de mon projet. À ma connaissance, le fichier v7.jar comportait des dépendances sur le fichier v4.jar . Donc, il avait besoin de son propre fichier v4.jar , au lieu de mon projet, créé automatiquement le fichier v4.jar .

Rapidement et simplement je l’ai corrigé de cette façon (j’utilise la version ADT: v21.0.0-531062 sur Windows XP Édition familiale)

  1. Fichier manifeste ouvert.
  2. Changement du projet existant minSdkVersion à la même valeur que maxSdkVersion (conseille: il peut être utile de créer un nouveau projet et de voir ce que c’est maxSdkVersion)
  3. Enregistrez le fichier manifeste.
  4. Cliquez avec le bouton droit sur le projet et sélectionnez Build Project.
  5. Depuis le menu principal: Projet – Nettoyer .. – cochez Seul le projet correspondant, ci-dessous, j’ai coché Commencer immédiatement la construction et ne construire que les projets sélectionnés et OK.
  6. ouvrez le fichier java – plus d’erreurs rouges!
  7. Revenez à l’étape 1 ci-dessus et modifiez Retour minSdkVersion à sa valeur d’origine (pour supprimer autant de version Android que possible).

Cela a fonctionné MAIS le problème revient tous les quelques jours. Je fais la même chose que ci-dessus et cela résout et me laisse évoluer.

J’ai eu un cas intéressant de ce problème avec Eclipse 4.4.2. Mon projet (P1) a référencé une classe externe (projet P2) avec deux méthodes du même nom mais de types d’argument différents:

 public static void setItem(Integer id) … public static void setItem(Item item) … 

Le type Item était contenu dans un troisième projet P3, que je ne voulais pas voir ici. P1 n’a appelé que la première méthode:

 ExternalClass.setItem(Integer.valueOf(12345)); 

Ainsi, la deuxième méthode, qui utilisait la classe Item , n’était pas utilisée, et il est vrai que P3 ne se trouvait pas dans le chemin de classe de la compilation – pourquoi le serait-il s’il n’est pas utilisé.

Toujours Eclipse m’a dit

 The type ...Item cannot be resolved. It is indirectly referenced from required .class files 

La compilation à partir de la ligne de commande n’a pas généré de tels problèmes. Changer le nom de la deuxième méthode (inutilisé ici!) A également fait disparaître le problème dans Eclipse.

Outre la cause déjà suggérée de l’absence d’un fichier de classe, cette erreur peut également indiquer un fichier de classe en double, eclipse signale cette erreur lorsqu’un fichier de classe sur le chemin de génération utilise une autre classe comportant plusieurs définitions dans le chemin de génération.

Puisque vous nous donnez très peu de détails, ce que vous avez probablement fait, ce qui est une erreur incroyablement facile à faire, est que, au lieu de

Build Path > Configure Build Path > Projects

et en ajoutant votre dossier de projet supplémentaire à partir de là, au lieu de cela vous êtes allé à

Build Path > Configure Build Path > Libraries

et ajouté votre dossier de projet à partir de là.

C’est très certainement le cas si votre code est correct, mais en réorganisant automatiquement les importations via le raccourci ctrl+space , au lieu que vos instructions d’importation se réfèrent à com.your.additionalproject, vos références pointent toutes vers bin.com.your.additionalproject .

Notez le bac. Ce qui signifie que vous faites indirectement référence à votre classe en traitant votre autre structure de dossiers de projets comme une bibliothèque, ce qui rend votre IDE capable de trouver exactement la classe binary à laquelle vous faites référence.

Pour corriger cela, supprimez le dossier des bibliothèques et ajoutez-le plutôt sous l’onglet Projets, puis réorganisez vos importations. Votre projet devrait fonctionner correctement.

Lorsque j’utilise une nouvelle version d’eclipse et que j’essaie d’utiliser l’espace de travail précédent que j’ai utilisé avec l’ancienne version d’eclipse, cette erreur s’est produite.

Voici comment je résous le problème:

Cliquez avec le bouton droit de la souris sur mon projet dans l’explorateur de packages -> Propriétés -> Chemin de génération Java -> Bibliothèques -> Je vois une erreur (croix) sur la bibliothèque système JRE. Parce que le chemin ne peut pas être trouvé. -> Double-cliquez sur la bibliothèque système JRE -> Sélectionnez l’option “JRE par défaut de l’espace de travail” -> Terminer -> OK. -> BUM IL FONCTIONNE

FYI.

Dans mon cas, cela résultait de mon ajout d’une nouvelle dépendance à mon fichier pom.xml .

La nouvelle dépendance dépendait d’une ancienne version d’une bibliothèque (2.5). Cette même bibliothèque était requirejse par une autre bibliothèque de mon pom.xml , mais elle nécessitait la version 3.0.

Pour une raison quelconque, lorsque Maven rencontre ces conflits, il omet simplement la version la plus récente. Dans Eclipse lors de l’affichage de pom.xml vous pouvez sélectionner l’onglet “hiérarchie de dépendance” en bas pour voir comment les dépendances sont résolues. Vous trouverez ici si la bibliothèque (et donc la classe) en question a été omise pour cette raison.

Dans mon cas, c’était aussi simple que de verrouiller la nouvelle version. Vous pouvez le faire en cliquant avec le bouton droit sur l’entrée – il existe une option pour la verrouiller dans le menu contextuel.

Pointez le JRE dans le chemin de génération vers un JDK. Cela a fonctionné pour moi.

Cela m’est arrivé à cause de dépendances transitives dans mes pots