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

186

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

Le type iglu.ir.TermVector ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis

Karikari
la source
21
Ajoutez le fichier jar qui contient iglu.ir.TermVector dans le chemin source de votre projet.
Harry Joy le
2
Si vous êtes sûr que le cours est fourni, essayez de nettoyer et d'actualiser tous vos projets
Mirco
Cela m'est arrivé à cause de dépendances transitives dans mes bocaux
Janac Meena
exactement! ce fichier jar doit être présent dans les dépendances pom.xml.
gaurav le

Réponses:

193

Cela signifie: "Une classe que vous utilisez a besoin d'une autre classe qui n'est pas sur le chemin des classes." Vous devez vous assurer (comme Harry Joy le suggère) d'ajouter le fichier jar requis au chemin de classe.

Arne Deutsch
la source
3
Réponse universelle et simple qui m'aide beaucoup dans des cas différents :) THX
Mariusz Chw
Lorsque vous essayez de supprimer des classes en particulier, vérifiez que les classes parentes font référence au type manquant. Si ce n'est pas toujours ce que signifie ce message, c'est probablement ce qu'il signifie la plupart du temps.
butallmj
Oui, j'ai trouvé que c'était dû à des pots manquants dans des pots référencés :) Merci.
Ali Imran
21
@Arne, pourquoi dit-on indirectement référencé alors? N'aurait-il pas dû dire qu'il n'est pas du tout référencé?
Pacerier
2
@Pacerier ce ne serait pas vrai. Ce n'est pas votre code qui fait directement référence à ce type, mais plutôt quelque chose que votre code utilise, donc la dépendance de votre code à ce type est "seulement" transitive, mais elle est là. «Indirectement» vous indique où chercher.
hiergiltdiestfu
22

Il s'agit aussi probablement d'une question de confusion d'Eclipse que d'une erreur réelle. J'ai ignoré l'erreur et exécuté le service Web dont il se plaignait endpointInterface, et cela fonctionnait bien, sauf pour avoir à gérer la boîte de dialogue chaque fois que je voulais l'exécuter. Juste une autre erreur opaque qui ne me dit rien.

Jerry Miller
la source
Ce n'est pas non plus dans un bocal. C'est dans l'un des projets inclus dans tous les projets inclus où cela est pertinent.
Jerry Miller
3
J'ai rencontré ce problème dans eclipse, mais la construction via maven a bien fonctionné. Le correctif consistait à supprimer et à réimporter le projet dans l'espace de travail eclipse qui contenait les classes requises.
PiersyP
Cela peut arriver parfois, mais j'ai rencontré des erreurs qui donnent la même réponse et le projet ne peut pas se construire.
Christopher Connery
13

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

Mário Kapusta
la source
J'ai nettoyé le projet (de Project-> Clean ...) et cela a fonctionné.
Anu Shibin Joseph Raj
mvn eclipse:cleanet / ou mvn eclipse:eclipsesemblent être le tour de magie pour le faire fonctionner.
Antoine Martin
13

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 .jar concerné, puis de forcer un update mavendans Eclipse.

Xavier Portebois
la source
1
Cela a fonctionné pour moi, contrairement à ce qui précède. Le problème est survenu lorsqu'un de mes coéquipiers a mis à jour la version d'un référentiel à partir de pom.
iaL
8

Il semble que cela ait été un problème connu (bogue 67414) qui a été résolu dans la version 3.0 ... quelqu'un a commenté qu'il se produisait également pour eux dans la version 3.4.

En attendant, la solution consiste à supprimer la bibliothèque système JRE du projet, puis à l'ajouter à nouveau.

Here are the steps:

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

Affichez l'onglet "Bibliothèques" dans la section "Chemin de construction"

Recherchez la "Bibliothèque système JRE" dans la liste (si elle est manquante, ce message d'erreur n'est pas un bogue d'éclipse mais un projet mal configuré)

Supprimez 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, 'Workspace JRE par défaut')

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

Espérons que l'erreur sera résolue ...

NPKR
la source
Oui, j'ai eu le même problème avec spring-web-3.0.1.RELEASE, alors qu'il était enregistré en tant que dépendance dans pom.xml, et fonctionnait déjà comme une dépendance dans certaines références, lorsque j'ai créé un http.csrf (). disable (). cors (). disable (). httpBasic (). et (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authenticated (); Il est tombé en panne, puis j'ai téléchargé le fichier jar et je l'ai importé de manière manuelle traditionnelle.
Tsakiroglou Fotis
5

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

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

Mayur
la source
4

J'ai eu cette exception parce qu'eclipse fonctionnait dans une version différente de jdk, vient de changer pour la bonne, nettoyer et construire et a fonctionné!

Orlando Valence
la source
3

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 avec le même nom mais des types d'arguments 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));

Donc, la deuxième méthode, qui utilisait la Itemclasse, n'a pas été utilisée, et il est vrai que P3 n'était pas dans le chemin de classe de la compilation - pourquoi devrait-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 produit de tels problèmes. Changer le nom de la deuxième méthode (inutilisée ici!) A également fait disparaître le problème dans Eclipse.

Renardo
la source
2
Je rencontre exactement le même problème avec Eclipse Photon Release (4.8.0)
Delphin
3

Ce qui a corrigé ça pour moi était right clicking on project > Maven > Update Project

Eduardo Dennis
la source
2

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

EDIT: Désolé, je n'ai pas vu la suggestion de verbose_mode ... même chose

Denis
la source
2

Pour moi, cela se produit lorsque je mets à niveau mon jdk vers la version 1.8.0_60 avec mon ancien ensemble de jars qui est utilisé depuis longtemps. Si je reviens à jdk1.7.0_25, tous ces problèmes ont disparu. Cela semble poser un problème de compatibilité entre le JRE et les bibliothèques.

Ming Leung
la source
1

J'ai eu l'erreur lorsque je modifiais simplement certains paramètres svn et rien dans le code. Le simple nettoyage des projets a corrigé l'erreur.

utilisateur2774465
la source
1

Dans mon cas, j'ai créé un projet et fait son minSdkVersion=9et targetSdkVersion=17. J'ai utilisé généré automatiquement libs/android-support-v4.jar. J'ai également dû utiliser l' ActionBarActivityutilisation android-support-v7-appcomapt.jar. J'ai donc simplement copié le android-support-v7-appcompat.jarfichier du android-sdk/extras/andrid/support/v7/appcompat/libsdossier et l'ai collé dans mon libsdossier de projet . Et cela a causé l'erreur ci-dessus. Donc, fondamentalement, j'avais également besoin de mettre un android-support-v4.jarfichier android-sdk/extras/andrid/support/v7/appcompat/libsdans mon libsdossier de projet . À ma connaissance, le v7.jarfichier avait des dépendances sur le v4.jarfichier. Donc, il avait besoin de son propre v4.jarfichier, au lieu de mon projet, un v4.jarfichier créé automatiquement .

laaptu
la source
1

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

  1. Fichier manifeste ouvert.
  2. Modification du projet existant minSdkVersion à la même valeur que maxSdkVersion (conseil: il peut être bon 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 Créer un projet.
  5. Dans le menu supérieur: Projet - Nettoyer .. - cochez Seulement le projet pertinent, ci-dessous j'ai coché Démarrer une construction immédiatement et Construire uniquement les projets sélectionnés et OK.
  6. ouvrez le fichier java - plus d'erreurs rouges!
  7. Revenez à l'étape 1 ci-dessus et remplacez Back minSdkVersion par sa valeur d'origine (pour prendre en charge autant de versions 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 ça résout et me permet de me développer.

user3445991
la source
0

En plus de 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 construction utilise une autre classe qui a plusieurs définitions dans le chemin de construction.

MilesHampson
la source
0

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

Build Path > Configure Build Path > Projects

et en ajoutant votre dossier de projet supplémentaire à partir de là, à la place, vous êtes allé à

Build Path > Configure Build Path > Libraries

et a ajouté votre dossier de projet à partir de là à la place.

C'est certainement le cas si votre code est correct, mais lors de la réorganisation automatique des importations via le ctrl+space raccourci, au lieu de vos instructions d'importation faisant référence à com.your.additionalproject, vos références pointent toutes vers bin.com.your.additionalproject.

Notez le bac. Cela signifie que vous faites indirectement référence à votre classe en traitant votre autre structure de dossiers de projet comme une bibliothèque, ce qui fait que votre IDE fait tout le nécessaire pour trouver la classe exactement binaire à laquelle vous faites référence.

Pour corriger cela, supprimez le dossier des bibliothèques, ajoutez-le à la place sous l'onglet Projets et réorganisez vos importations. Votre projet devrait fonctionner correctement.

singe d'acier
la source
0

Lorsque j'utilise une nouvelle version d'Eclipse et que j'essaye 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 sur mon projet sur l'Explorateur de packages -> Propriétés -> Chemin de construction Java -> Bibliothèques -> Je vois une erreur (signe croisé) sur la bibliothèque système JRE. Parce que le chemin est introuvable. -> Double-cliquez sur la bibliothèque système JRE -> Sélectionnez l'option "Workspace Default JRE" -> Terminer -> OK. -> BUM IL FONCTIONNE

FYI.

oiyio
la source
0

Dans mon cas, c'était le résultat de l'ajout d'une nouvelle dépendance à mon pom.xmlfichier.

La nouvelle dépendance dépendait d'une ancienne version d'une bibliothèque (2.5). Cette même bibliothèque était requise par une autre bibliothèque de monpom.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 la visualisation, pom.xmlvous pouvez sélectionner l'onglet "hiérarchie des dépendances" 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 version la plus récente. Vous pouvez le faire en cliquant avec le bouton droit sur l'entrée - il y a une option pour la verrouiller dans le menu contextuel.

Chris Staikos
la source
0

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

Neeleshkumar S
la source