Das deklarierte Paket stimmt nicht mit dem erwarteten Paket "" überein.

87

Ich benutze Eclipse und habe Java seit einiger Zeit nicht mehr benutzt. Ich kann meinen Code jedoch problemlos über die Befehlszeile kompilieren und die erforderlichen .classDateien generieren . In Eclipse wird das beanstandet The declared package "Devices" does not match the expected package "". Was bedeutet das und wie kann ich das beheben?

Beispielcode:

package Devices;

public final class DevFrequency 
{
    public short messageID;
    public double frequency;
    public short converterID;
    public DevFrequency() 
    {
    }
    public DevFrequency(short _messageID,double _frequency,short _converterID)
    {
        messageID = _messageID;
        frequency = _frequency;
        converterID = _converterID;
    }
}

Der Name meines Projekts ist DeviceDDS.

Marcel Korpel
quelle
2
Befindet sich diese Klasse im /src/ConvertersVerzeichnis?
Jeremy
6
Wenn Sie Ihre Frage nachträglich ändern möchten (was ehrlich gesagt sinnlos erscheint), müssen Sie konsequent sein - Sie haben den ersten Absatz der Frage nicht bearbeitet. Sie haben auch alle Kommentare seltsam aussehen lassen. Warum fast anderthalb Jahre später alles ändern?
Jon Skeet

Antworten:

50

Eclipse erwartet, dass das deklarierte Paket mit der Verzeichnishierarchie übereinstimmt. Daher wird erwartet, dass sich Ihre Java-Datei in einem Verzeichnis mit dem Namen "Geräte" unter Ihrem Quellstamm befindet. Im Moment sieht es so aus, als ob sich die Datei direkt in Ihrem Quellstamm befindet. Erstellen Sie also das entsprechende Verzeichnis und verschieben Sie die Datei dort hinein.

Beachten Sie, dass Pakete herkömmlicherweise in Kleinbuchstaben geschrieben sind und Ihren Organisationsnamen in umgekehrter DNS-Reihenfolge enthalten, z

com.foo.devices;
Jon Skeet
quelle
3
@Sakti: Soweit ich weiß, kannst du nicht, und ich würde dir dringend raten, es nicht zu tun, selbst wenn du könntest. Alle erfahrenen Java-Entwickler erwarten von Ihnen, dass Sie die normalen Konventionen einhalten.
Jon Skeet
84

Versuchen Sie, die Datei zu schließen und erneut zu öffnen.

Es ist möglich, diesen Fehler in Eclipse zu erhalten, wenn am Dateispeicherort oder an der Paketdeklaration absolut nichts falsch ist. Versuchen Sie dies, bevor Sie viel Zeit damit verbringen, diese anderen Lösungen auszuprobieren. Manchmal wird die Sonnenfinsternis einfach verwirrt. Es hat bei mir mehrmals funktioniert. Ich gutzuschreiben die Idee zu Joshua Goldberg .

candied_orange
quelle
2
Hatte dieses Problem mit einem Gradle-Projekt in VS Code. Wieder öffnen behoben.
TastyWheat
Das Öffnen und Schließen der Datei im Eclipse-Editor half bei der Lösung des Problems. Ich hatte einen Quellordner in der Registerkarte Java Config Build - Source hinzugefügt, der Fehler wurde nicht behoben, aber als ich den Editor in Eclipse schloss und öffnete, half es. :-)
JassJava
44

Lösung 1: Eine Lösung, die bei mir funktioniert hat, als der Fehler " Das deklarierte Paket stimmt nicht mit dem erwarteten Paket überein" für ein Projekt aufgetreten ist, das ich aus Eclipse CVS ausgecheckt habe:

1.Right klicken Sie auf das Projekt in der Navigationsleiste und klicken Sie auf ‚Löschen‘
2.Make sicher ‚ Projekt löschen Inhalt auf der Festplatte ‘ Option wird nicht geprüft, und auf OK klicken.
3. Gehen Sie nun nach dem Löschen des Projekts zu Datei -> Importieren -> Allgemein -> Vorhandene Projekte in den Arbeitsbereich.
4. Wählen Sie Ihren Arbeitsbereich aus der Verzeichnisliste aus und aktivieren Sie das Kontrollkästchen neben Ihrem Projektnamen. Klicken Sie auf " Fertig stellen ".

Lösung 2: Ich habe diesen Fehler erneut mit der folgenden Meldung erhalten

Eclipse-Build-Fehler - java.lang.Object kann nicht behoben werden Ich musste einer anderen hier erwähnten Route folgen und der Fehler verschwand.

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

  1. 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 keine Eclipse-Fehler, aber ein falsch konfiguriertes Projekt)
  2. Entfernen Sie die "JRE-Systembibliothek"
  3. 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").
  4. 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 ...

Nanospeck
quelle
Ich musste dies auch tun (dem Build ein Verzeichnis mit tollen Tests hinzufügen). Vergessen Sie nicht, sich Notizen zu Ihren Laufkonfigurationen zu machen, die Sie neu erstellen müssen. Irgendeine Idee, warum dies benötigt wird? So ein Schmerz.
Joshua Goldberg
10
Einfachere Lösung: Ich war wieder in dieser Situation und konnte sie zum Laufen bringen, indem ich das Projekt schloss, Eclipse neu startete und das Projekt erneut öffnete.
Joshua Goldberg
12
Noch einfacher! Ich hatte es gerade wieder und es ging weg, indem ich den Editor der einzelnen problematischen Datei schloss und wieder öffnete.
Joshua Goldberg
4
Ein Neustart von Eclipse scheint das Problem zu beheben.
Mike R
Lösung 1 hat bei mir funktioniert. Sehr merkwürdig. Ich habe denselben Git-Klon auf anderen Computern in Eclipse importiert und dieses Problem nicht gesehen.
Dnuttle
11

Ich hatte dieses Problem - die anderen Klassen in meinem Paket waren in Ordnung, aber eine Klasse hatte den Fehler dagegen. An der Paketdeklaration war nichts auszusetzen.

Ich habe es dadurch behoben refactor->moveund die Klasse vorübergehend in ein anderes Paket verschoben, dann refactor->movezurück zum ursprünglichen Paket.

Ayahuasca
quelle
11

Ich habe das Problem folgendermaßen gelöst:

  1. Wählen Sie das Projekt aus - Rechtsklick - Java-Erstellungspfad.

  2. In der Registerkarte Quelle ändern Sie die srcin src/main/java.

  3. Eclipse ordnet das gesamte Projekt neu.

dafali
quelle
2

Sie müssen die Klasse in einem Ordner haben Devices.

Marcelo
quelle
2

Erstellen Sie unter Ihrem Projekt ein neues Paket mit dem Namen "Geräte" und platzieren Sie Ihre Klasse darin. Dies entspricht der Klasse, die in einem Verzeichnis namens "Geräte" in Ihrem Projektquellordner abgelegt wird.

tskuzzy
quelle
1

Stellen Sie sicher, dass dies Devicesin den Projekteigenschaften als Quellordner definiert ist.

Adam Matan
quelle
1

Ich habe die gleiche Art von Fehler erhalten, aber mein Paket war absolut korrekt. Wenn ich gerade meinen Editor geschlossen und geöffnet habe, verschwindet der Fehler. Hoffe, dies könnte in einigen Szenarien helfen.

Easwaramoorthy K.
quelle
1

Ich habe dies behoben, indem ich ein "Ausschluss" -Attribut für dieses Paket in meiner .classpathDatei entfernt habe. Entfernen Sie das Attribut, nicht das gesamte Tag, oder "src / java" ist kein Quellordner mehr.

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>
Noumenon
quelle
0

Stellen Sie sicher, dass Sie ein korrektes Paket erstellt haben. Möglicherweise haben Sie die Möglichkeit, einen Ordner anstelle eines Pakets zu erstellen

Karthick
quelle
0
  1. Erstellen Sie das Verzeichnis [Ihr.Projektname] im Arbeitsbereich-Stammverzeichnis Ihres Projekts.

  2. Kopieren Sie * .java von "src" in dieses Verzeichnis.

  3. Projekt schließen und erneut öffnen.

B347tl7
quelle
0

Dies passierte mir, als ich ein Projekt aus einem SVN-Repository in Eclipse auscheckte. In meinem .m2-Ordner befanden sich JAR-Dateien, die Eclipse nicht betrachtete. So beheben Sie das Problem:

Klicken Sie mit der rechten Maustaste auf den Projektordner. Konfigurieren> In Maven-Projekt konvertieren

und das löste das Problem.

carl_corder
quelle
0

Es gibt eine Million Antworten, aber hier ist eine andere: Kopieren Sie die Dateien in ein neues Paket, löschen Sie das alte Paket und benennen Sie das neue Paket in den Namen des alten Pakets um.

Omri374
quelle
0

Stellen Sie sicher, dass Sie kein Standardpaket verwenden. Erstellen Sie ein neues Paket mit dem Namen "Geräte", kopieren Sie diesen Code und verwenden Sie ihn.


quelle
0

Ich hatte diese Art von Situationen, als ich Klassen aus anderen Paketen / Projekten kopierte.

Menü-> Projekt-> Reinigen hilft normalerweise.

Yurin
quelle
0

In meinem Fall habe ich die Fehlermarkierung auf der Registerkarte Probleme ausgewählt und gelöscht, da die Hauptmethode der Java-Datei korrekt ausgeführt wurde. Das ist ein Fehler in Eclipse Neon mit der Vielzahl der installierten Plugins.

Leniel Maccaferri
quelle
0

Ich war auch mit diesem Problem konfrontiert, als ich ein vorhandenes Projekt in Eclipse importiert hatte. Es war ein Gradle-Projekt, aber während des Imports habe ich es als reguläres Projekt importiert, indem ich auf Allgemein-> Vorhandene Projekte in den Arbeitsbereich geklickt habe. Um das Problem zu beheben, habe ich Gradle nature zum Projekt hinzugefügt, indem ich :::: mit der rechten Maustaste auf Projektordner -> Konfigurieren-> Gradle Nature hinzufüge klicke

Gopi
quelle
0

Ich habe Spring Tool Suite 4 verwendet. Ich konnte das Problem nicht herausfinden. Die Verzeichnisstruktur entsprach dem Paketnamen.

Aber die Reinigung des Projekts hat mir geholfen.

Prisar
quelle
0

Dieses Problem wurde durch die Erwähnung der beschlossene Paket Namen

Ich habe meine Datei Test_Steps.java verschoben, die sich unter dem Paket stepDefinition befand

Geben Sie hier die Bildbeschreibung ein

Durch einfaches Hinzufügen des Pakets stepDefinition wurde das Problem behoben

Dieses Problem kann also auftreten, wenn Sie ein Paket haben und es nicht in Ihrer Klassendatei verwenden.

Durch Hinzufügen wurde das Problem behoben und der Fehler wurde nicht mehr angezeigt.

Geben Sie hier die Bildbeschreibung ein

Gaurav Khurana
quelle