Frage

Wir haben ein Paket haben, dass Ende mit Ausnahme z.B.

package a.b.c.exception;

Unsere Code-Basis hatte keine Probleme bis Eclipse 3.3, aber wenn wir 3.4 Eclipse verschoben, begann es zu Fehlern zu diesem Paket im Zusammenhang geben:

"The package a.b.c.exception collides with a type"

Wenn ich die Paketnamen zu a.b.c.exceptions Refactoring, gibt es keine Probleme. Ist dies aufgrund eines Fehlers in Eclipse 3.4 oder gibt es eine Einstellung dieses Verhalten zu korrigieren?

War es hilfreich?

Lösung 5

Ich änderte eine der Übersetzungsoption in Eclipse und das Problem verschwunden. Unter Arbeitsplatz Eigenschaften: Java Compiler -> Fehler / Warnungen ->     Change ‚Nicht verwendete Einfuhr‘ von ‚Warnung‘ auf ‚Ignorieren‘.

Andere Tipps

Es ist, weil Sie eine Klasse namens exception (mit einem kleinen „e“) in dem a.b.c Paket und ein Paket mit dem Namen a.b.c.exception haben.

Es verursacht einen Namen Kollision, weil, wenn Sie den Code a.b.c.exception.doSomething(); haben - Heißt das, Sie wollen die statische doSomething() Methode in der Klasse a.b.c.exception anrufen? Oder bedeutet es, es gibt eine Klasse namens a.b.c.exception.doSomething, dass Sie versuchen, den Konstruktor aufrufen?

Stick mit den Java-Namenskonventionen - Pakete Kleinbuchstaben, beginnend Klassen mit einem Groß und Kamel-Fall nach -. Und Sie werden nie dieses Problem finden Sie unter

========== EDIT ==========

Dies ist die einzige legitime Grund sollte dieser Fehler zeigen, bis ...

Es muss nicht direkt in Ihrem Projekt sein, in einem anderen Projekt oder Bibliothek sein könnte, dass Ihr Projekt abhängt. Dies sollten Sie alle Vorkommen der Klasse überall auf dem Build-Pfad oder einem Projekt zeigen: die Taschenlampe suchen Schaltfläche in der Eclipse-Symbolleiste Hit -> Wählen Sie ‚Java Search‘ -> eingeben abcexception in das Suchfeld -> wählen Sie ‚Case sensitive‘ - > wählen ‚Type‘ in ‚Suche nach‘. -> sicherstellen, dass alle Optionen für ‚Suche in‘ ausgewählt werden

Verwenden Sie Tools, die Klassen zu generieren? Könnten sie sie in das Build-Verzeichnis Ihres Projekts werden setzen? Wenn Sie sehen den Fehler, wenn Sie das Projektes Build-Verzeichnis gehen, und gehen Sie in das a / b / c / Verzeichnis haben Sie eine .class-Datei für ‚Ausnahme‘ sehen?

Natürlich in der Regel von Eclipse könnte einen Fehler hat (obwohl ich es erwarten würde wäre ein Bug-Report in Eclipse 3.4 und Sie wäre in der Lage mehr Beschwerden zu finden, wenn es ist ...), Eclipse installieren könnte gebrochen in irgendeiner Weise (Can jemand öffnen Sie Ihr Projekt in Eclipse 3.4? können Sie in ein anderes Verzeichnis ein sauberes Eclipse-3.4 installieren zu tun? ist der Fehler erscheinen da?), oder Ihr Projekt in irgendeiner Weise werden (erstellen Sie ein neues Projekt vermasselt mit keinem anderen Abhängigkeiten als die JDK, erstellen in Ihrem neuen Projekt das abcexception Paket, eine Klasse in Ihrem Projekt import a.b.c.exception.*; erstellen und sehen, ob der Fehler auftritt.).

In Java können Sie keinen Klassennamen haben, der das gleiche wie ein Paketname ist.

Das bedeutet das JDT-Paket nur die Regel durchgesetzt haben muss in 3.4

Siehe Bug 63668 zum Beispiel.


Als Nate Kommentare:

  

Eine Klasse namens Exception wird nicht verhindern, dass Paket Ausnahme zu schaffen .
   Case Angelegenheiten .

     

Beachten Sie auch den vollständigen Namen einer Klasse enthält das Paket, es ist in.
  So a.b.SomeClass (Klassenname) unterscheidet sich von x.y.SomeClass (Paketname).
  Es würde hier keinen Namen Kollision sein.

     

Der Klassenname und der Name des Pakets haben in beiden Fällen und Paket übereinstimmen, diesen Fehler zu verursachen.

finden Sie unter href="https://stackoverflow.com/questions/2674325/eclipse-3-4-ganymede-package-collision-with-type/2675243#2675243"> .

stieß ich auf ein ähnliches Problem in einer großen Code-Basis, dass ich geerbt. Es stellt sich heraus, dass der Zusammenstoß durch ein teilweise qualifizierten Klassennamen in einem JavaDoc Link verursacht wurde.

zu paraphrasieren, wurde von Eclipse mir zu sagen, dass ich für a.b.c.d. ein Paket / Typ Zusammenstoß hatte beim Kompilieren a.b.c.d.London. Doing eine Java-Suche auf dem Code für a.b.c.d ergab, dass Eclipse-gedacht, dass ein JavaDoc Kommentar in a.b.c.Paris ein Spiel war. Die JavaDoc Kommentar enthielt {@ Link d.NewYork}. Als ich das es geändert lesen {@link a.b.c.d.NewYork} die Kompilierung Fehler behoben wurde.

Es sollte auch beachtet werden, dass NewYork nicht in die Paris-Klasse importiert wurde, da es nur in dem JavaDoc Kommentar erscheint. Dies ist auch nicht Arbeit es un aufgelöste in seiner abgekürzten Form und klicken Sie auf den Link in der Bemerkung gemacht. So dass es eine absolute Referenz macht auch die JavaDoc Link zu arbeiten.

Ich weiß, das klingt dumm, und möglicherweise zu einfach um wahr zu sein, aber ich löste diese genau die gleiche Fehlermeldung von:

  • Löschen der gesamten Zeile des Paketnamen verursacht die Fehlermeldung.
  • Speichern der .java-Datei (dies löst ein neuer Fehler auf der gleichen Linie besagt „Das erklärt Paket‚‘nicht die erwartete Paket passen“), was es tun soll.
  • Re-Eingabe des ursprünglichen Paketnamen auf der gleichen Linie.
  • Speichern der .java-Datei.

Könnten Sie nicht sagen, warum dies funktioniert, aber es tat, und Eclipse blieb auf der Stelle einen Wutanfall zu werfen.

Sicher Typisierung und schnelle Programmierung.

-Goodge

Wenn Sie eine Klasse Foo haben, können Sie nicht ein Paket haben, dass Enden mit Foo, wie com.my.Foo.
Auch wenn Sie Maven Stil verwenden, müssen Sie Ressourcen in Ihrem Projekt unter so etwas wie src / main / resources
Die Ordner in Ihren Ressourcen auch ein Paket Stil haben und dort auch, können Sie keinen Ordner, die den Namen der Klasse enthält.

Sie werden auf jeden Fall dieses Problem auftreten, wenn Plugin gemäß den empfohlenen Konventionen eine Jenkins zu entwickeln.
wenn Sie die Jenkins Konventionen folgen, und erstellen Sie einen Builder in einer Klasse mit dem Namen MyBuilder in Paket x.y dann sollen Sie auch Ihre .jelly in einem Ressourcen-Ordner mit dem Namen x.y.MyBuilder platzieren. Dies wird in dem obigen Problem führen.
Wenn Sie jedoch den Namen Ihres Ressourcenordner x.y.myBuilder (Hinweis kleines ‚m‘ in myBuilder), anders als die empfohlene Konvention, wird das Plugin noch Arbeit, wie Sie beabsichtigten

scroll top