Eclipse-Fehler: Indirekt aus erforderlichen .class-Dateien referenziert?

185

Ich habe einen Fehler in Eclipse erhalten. Was bedeutet diese Fehlermeldung:

Der Typ iglu.ir.TermVector kann nicht aufgelöst werden. Es wird indirekt aus erforderlichen .class-Dateien referenziert

Karikari
quelle
21
Fügen Sie im Quellpfad Ihres Projekts ein Glas hinzu, das iglu.ir.TermVector enthält.
Harry Joy
2
Wenn Sie sicher sind, dass die Klasse bereitgestellt wird, versuchen Sie, alle Ihre Projekte zu bereinigen und aufzufrischen
Mirco
Dies geschah mir aufgrund von transitiven Abhängigkeiten in meinen Gläsern
Janac Meena
genau! Dieses Glas muss in den Abhängigkeiten von pom.xml vorhanden sein.
Gaurav

Antworten:

191

Es bedeutet: "Eine Klasse, die Sie verwenden, benötigt eine andere Klasse, die sich nicht im Klassenpfad befindet." Sie sollten sicherstellen (wie Harry Joy vorschlägt), dass Sie das erforderliche Glas zum Klassenpfad hinzufügen.

Arne Deutsch
quelle
3
Universelle und einfache Antwort, die mir in verschiedenen Fällen sehr hilft :) THX
Mariusz Chw
Wenn Sie versuchen, insbesondere Klassen zu entfernen, überprüfen Sie die übergeordneten Klassen auf Verweise auf den fehlenden Typ. Wenn dies nicht immer die Bedeutung dieser Nachricht ist, bedeutet dies wahrscheinlich die meiste Zeit.
Butallmj
Ja, ich fand, dass es an einigen fehlenden Gläsern in referenzierten Gläsern lag :) Danke.
Ali Imran
21
@Arne, warum heißt es dann indirekt referenziert? Sollte es nicht gesagt haben, dass es überhaupt nicht referenziert wird?
Pacerier
2
@ Pacerier das wäre nicht wahr. Es ist nicht Ihr Code, der direkt auf diesen Typ verweist, sondern etwas, das Ihr Code verwendet. Die Abhängigkeit von Ihrem Code zu diesem Typ ist also "nur" transitiv, aber er ist vorhanden. "Indirekt" sagt Ihnen, wo Sie suchen müssen.
hiergiltdiestfu
21

Dies ist ebenso wahrscheinlich eine Frage der Verwirrung von Eclipse wie ein tatsächlicher Fehler. Ich habe den Fehler ignoriert und den Webdienst ausgeführt, über dessen EndpointInterface er sich beschwert hat, und er lief einwandfrei, außer dass ich mich jedes Mal mit dem Dialog befassen musste, wenn ich ihn ausführen wollte. Nur ein weiterer undurchsichtiger Fehler, der mir nichts sagt.

Jerry Miller
quelle
Es ist auch nicht in einem Glas. Es ist in einem der Projekte enthalten, die in allen enthaltenen Projekten enthalten sind, wo es von Bedeutung ist.
Jerry Miller
3
Ich habe dieses Problem in Eclipse erlebt, aber das Erstellen über Maven hat gut funktioniert. Das Update bestand darin, das Projekt zu löschen und erneut in den Eclipse-Arbeitsbereich zu importieren, der die erforderlichen Klassen enthielt.
PiersyP
Dies kann manchmal vorkommen, aber ich bin auf Fehler gestoßen, die dieselbe Antwort geben, und das Projekt kann nicht erstellt werden.
Christopher Connery
13

Es passiert mir manchmal, dass ich das immer mit dem Befehl "mvn eclipse: clean" behoben habe, um alte Eigenschaften zu bereinigen und dann mvn eclipse: eclipse -Dwtpversion = 2.0 auszuführen (natürlich für Webprojekte). Es sind einige alte Eigenschaften gespeichert, so dass Eclipse manchmal verwirrt ist.

Mário Kapusta
quelle
Ich habe das Projekt bereinigt (von Projekt-> Reinigen ...) und es hat funktioniert.
Anu Shibin Joseph Raj
mvn eclipse:cleanund / oder mvn eclipse:eclipsescheinen der Zaubertrick zu sein, damit es funktioniert.
Antoine Martin
13

Ich hatte diesen Fehler aufgrund eines beschädigten lokalen Maven-Repositorys .

Um das Problem zu beheben, musste ich nur in mein Repository gehen und den Ordner löschen, in dem sich die betreffende .jar-Datei befand, und dann eine update mavenin Eclipse erzwingen .

Xavier Portebois
quelle
1
Das hat bei mir funktioniert, vor allem aber nicht. Das Problem trat auf, als einer meiner Teamkollegen die Version eines Repositorys von pom aktualisierte.
iaL
8

Es hört sich so an, als wäre dies ein bekanntes Problem (Bug 67414), das in 3.0 behoben wurde ... jemand hat kommentiert, dass es auch in 3.4 für ihn auftritt.

In der Zwischenzeit besteht die Problemumgehung darin, die JRE-Systembibliothek aus dem Projekt zu entfernen und sie dann wieder hinzuzufügen.

Here are the steps:

Gehen Sie zu den Eigenschaften des Projekts mit dem Erstellungsfehler (Rechtsklick> Eigenschaften).

Zeigen Sie die Registerkarte "Bibliotheken" im Abschnitt "Erstellungspfad" an

Suchen Sie die "JRE-Systembibliothek" in der Liste (wenn diese fehlt, ist diese Fehlermeldung kein Eclipse-Fehler, sondern ein falsch konfiguriertes Projekt).

Entfernen Sie die "JRE-Systembibliothek"

Klicken Sie auf "Bibliothek hinzufügen ...", wählen Sie "JRE-Systembibliothek" und fügen Sie die entsprechende JRE für das Projekt hinzu (z. B. "Arbeitsbereich-Standard-JRE").

Klicken Sie in der Bibliotheksauswahl auf "Fertig stellen" und in den Projekteigenschaften auf "OK" und warten Sie auf die Neuerstellung des Projekts

Hoffentlich wird der Fehler behoben ...

NPKR
quelle
Ja. Ich hatte das gleiche Problem mit spring-web-3.0.1.RELEASE.Während es als Abhängigkeit in pom.xml registriert war und bereits in einigen Referenzen als Abhängigkeit arbeitete, als ich ein http.csrf () erstellte. disable (). cors (). disable (). httpBasic (). und (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authenticated (); Es ist kaputt gegangen. Dann habe ich die JAR-Datei heruntergeladen und sie auf herkömmliche manuelle Weise importiert.
Tsakiroglou Fotis
5

Dieser Fehler tritt auf, wenn die Klassen in der JAR-Datei nicht der gleichen Struktur wie die Ordnerstruktur der JAR-Datei folgen.

Beispiel: Wenn Ihre Klassendatei das Paket com.test.exam enthält und die aus dieser Klassendatei erstellte class.jar die Struktur test.exam hat ... wird ein Fehler ausgelöst. Sie müssen die Paketstruktur Ihrer classes.jar korrigieren und sie dann in den ecplipse-Erstellungspfad aufnehmen ...

Mayur
quelle
4

Ich habe diese Ausnahme erhalten, weil Eclipse in einer anderen Version von JDK funktioniert hat, nur auf die richtige Version geändert, sauber und erstellt und funktioniert hat!

Orlando Valencia
quelle
3

Ich hatte einen interessanten Fall dieses Problems mit Eclipse 4.4.2. Mein Projekt (P1) hat auf eine externe Klasse (Projekt P2) mit zwei Methoden mit demselben Namen, aber unterschiedlichen Argumenttypen verwiesen:

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

Der Typ Itemwar in einem dritten Projekt P3 enthalten, das ich hier nicht sichtbar machen wollte. P1 hat nur die erste Methode aufgerufen:

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

Die zweite Methode, die die ItemKlasse verwendete, wurde also nicht verwendet, und es ist wahr, dass P3 nicht im Kompilierungsklassenpfad enthalten war - warum sollte es verwendet werden, wenn es nicht verwendet wird?

Immer noch sagte mir Eclipse

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

Das Kompilieren über die Befehlszeile führte zu keinen derartigen Problemen. Durch Ändern des Namens der zweiten Methode (hier nicht verwendet!) Wurde das Problem auch in Eclipse behoben.

Renardo
quelle
2
Ich habe genau das gleiche Problem mit Eclipse Photon Release (4.8.0)
Delphin
3

Was es für mich reparierte, war right clicking on project > Maven > Update Project

Eduardo Dennis
quelle
2

Wenn Sie immer noch keine Fehler in Ihrem Setup finden, können Sie Projekt -> Bereinigen und bereinigen Sie alle Projekte im Arbeitsbereich.

EDIT: Sorry, habe den Vorschlag von verbose_mode nicht gesehen ... dasselbe

Denis
quelle
2

Für mich passiert es, wenn ich mein JDK auf 1.8.0_60 aktualisiere, wobei mein alter Satz von Gläsern schon lange verwendet wird. Wenn ich auf jdk1.7.0_25 zurückgreife, sind alle diese Probleme weg. Es scheint ein Problem hinsichtlich der Kompatibilität zwischen der JRE und den Bibliotheken zu sein.

Ming Leung
quelle
1

Ich habe den Fehler erhalten, als ich nur einige SVN-Einstellungen geändert habe und nichts im Code. Nur das Reinigen der Projekte hat den Fehler behoben.

user2774465
quelle
1

In meinem Fall habe ich ein Projekt erstellt und sein minSdkVersion=9und erstellt targetSdkVersion=17. Ich habe automatisch generiert libs/android-support-v4.jar. Ich musste auch Gebrauch machen ActionBarActivitymit android-support-v7-appcomapt.jar. Also habe ich die android-support-v7-appcompat.jarDatei einfach aus dem android-sdk/extras/andrid/support/v7/appcompat/libsOrdner kopiert und in meinen Projektordner eingefügt libs. Und dies verursachte den obigen Fehler. Im Grunde musste ich auch eine android-support-v4.jarDatei aus android-sdk/extras/andrid/support/v7/appcompat/libsmeinem Projektordner libsablegen. Nach meinem Wissen hatte die v7.jarDatei Abhängigkeiten von der v4.jarDatei. Also brauchte es eine eigene v4.jarDatei, anstelle meines Projekts, automatisch erstellte v4.jarDatei.

laaptu
quelle
1

Schnell und einfach habe ich es auf diese Weise behoben (ich verwende die ADT-Version: v21.0.0-531062 unter Windows XP Home Edition).

  1. Manifestdatei geöffnet.
  2. Das vorhandene Projekt minSdkVersion wurde auf den gleichen Wert wie maxSdkVersion geändert (Hinweis: Es kann sinnvoll sein, ein neues Projekt zu erstellen und zu sehen, um was es sich bei maxSdkVersion handelt).
  3. Manifestdatei speichern.
  4. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Projekt erstellen.
  5. Aus dem oberen Menü: Projekt - Bereinigen .. - Aktivieren Sie Nur das relevante Projekt. Unten aktivierte ich Sofort einen Build starten und Nur die ausgewählten Projekte erstellen und OK.
  6. Öffnen Sie die Java-Datei - KEINE roten Fehler mehr!
  7. Zurück zu Schritt 1 oben und Ändern von Back minSdkVersion auf den ursprünglichen Wert (um so viele Android-Versionen wie möglich zu unterstützen).

Es hat funktioniert, ABER das Problem tritt alle paar Tage wieder auf. Ich mache das gleiche wie oben und es löst und lässt mich entwickeln.

user3445991
quelle
0

Zusätzlich zu der bereits vorgeschlagenen Ursache für das Fehlen einer Klassendatei kann dieser Fehler auch auf eine doppelte Klassendatei hinweisen. Eclipse meldet diesen Fehler, wenn eine Klassendatei im Erstellungspfad eine andere Klasse verwendet, die mehrere Definitionen im Erstellungspfad enthält.

MilesHampson
quelle
0

Da Sie uns nur sehr wenige Details mitteilen, haben Sie höchstwahrscheinlich einen unglaublich einfachen Fehler gemacht, anstatt zu gehen

Build Path > Configure Build Path > Projects

und fügen Sie von dort aus Ihren zusätzlichen Projektordner hinzu, stattdessen gingen Sie zu

Build Path > Configure Build Path > Libraries

und fügte stattdessen Ihren Projektordner von dort hinzu.

Dies ist auf jeden Fall der Fall, wenn Ihr Code korrekt ist. Wenn Sie jedoch die Importe über die ctrl+spaceVerknüpfung automatisch neu organisieren , verweisen Ihre Verweise anstelle Ihrer Importanweisungen, die auf com.your.additionalproject verweisen, alle auf bin.com.your.additionalproject.

Beachten Sie den Behälter. Dies bedeutet, dass Sie indirekt auf Ihre Klasse verweisen, indem Sie Ihre andere Projektordnerstruktur als Bibliothek behandeln, sodass Ihre IDE alle Aufgaben erledigt, um genau die Binärklasse zu finden, auf die Sie sich beziehen.

Um dies zu korrigieren, entfernen Sie den Ordner aus den Bibliotheken, fügen Sie ihn stattdessen auf der Registerkarte Projekte hinzu und organisieren Sie Ihre Importe neu. Ihr Projekt sollte gut funktionieren.

Stahlmonkey
quelle
0

Wenn ich eine neue Eclipse-Version verwende und versuche, den vorherigen Arbeitsbereich zu verwenden, den ich mit der alten Eclipse-Version verwendet habe, ist dieser Fehler aufgetreten.

So löse ich das Problem:

Klicken Sie mit der rechten Maustaste auf mein Projekt im Paket-Explorer -> Eigenschaften -> Java-Erstellungspfad -> Bibliotheken -> Ich sehe einen Fehler (Cross Sign) in der JRE-Systembibliothek. Weil der Pfad nicht gefunden werden kann. -> Doppelklicken Sie auf die JRE-Systembibliothek -> Wählen Sie die Option "Workspace Default JRE" -> Finish -> OK. -> Penner, es funktioniert

Zu Ihrer Information.

oiyio
quelle
0

In meinem Fall war es das Ergebnis des Hinzufügens einer neuen Abhängigkeit zu meiner pom.xmlDatei.

Die neue Abhängigkeit hing von einer alten Version einer Bibliothek ab (2.5). Dieselbe Bibliothek wurde von einer anderen Bibliothek in meiner benötigt pom.xml, aber es war Version 3.0 erforderlich.

Wenn Maven auf diese Konflikte stößt, wird aus irgendeinem Grund einfach die neueste Version weggelassen. In Eclipse können Sie beim Anzeigen pom.xmlunten die Registerkarte "Abhängigkeitshierarchie" auswählen, um zu sehen, wie Abhängigkeiten aufgelöst werden. Hier finden Sie, ob die betreffende Bibliothek (und damit Klasse) aus diesem Grund weggelassen wurde.

In meinem Fall war es so einfach wie das Sperren der neueren Version. Sie können dies tun, indem Sie mit der rechten Maustaste auf den Eintrag klicken. Sie können ihn im Kontextmenü sperren.

Chris Staikos
quelle
0

Zeigen Sie mit der JRE im Erstellungspfad auf ein JDK. Das hat bei mir funktioniert.

Neeleshkumar S.
quelle