2012-03-29 7 views
1

Wenn ich 2 Java-Projekte in meinem RAD habe. Projekt # 1 hat eine Klasse wie folgt:Java gleiche Klasse in demselben Paket in verschiedenen Projekten auf Eclipse

/src/com/orgname/model/Model1.java 

Im Projekt # 2, ich habe auch:

/src/com/orgname/model/Model1.java 

Beiden Klassen kompilieren in Ordnung. Jetzt, in Projekt # 2, füge ich Projekt # 1 als Build-Pfad-Abhängigkeit hinzu. Jetzt in meinem Projekt # 2, schreibe ich eine Test-Klasse, wo ich: import com.orgname.model.Model1

Welches Model1 wird importiert?

+1

haben Sie es versucht? –

+0

Warum hast du es nicht versucht? – dexametason

+0

Wenn Model1 im Wald verloren gegangen ist und es kein Projekt Nr.2 gibt, um es aufzunehmen ... ist es immer noch falsch? - Sie würden es nicht wissen, bis Sie es versuchen? – radimpe

Antwort

1

Es ist eine schreckliche Idee, doppelte Kopien von Klassen zu haben! Es kann gut kompilieren, und es kann sogar 9 mal von 10 gut laufen, aber es gibt keine (einfache) Möglichkeit, sicherzustellen, dass man während der Laufzeit über das andere geladen wird!

In der Tat, ein sehr häufiges Auftreten, wenn Duplikate wie diese existieren (ob .class-Dateien oder .jars) ist, dass in einigen Fällen Version 1 geladen wird, und andere Male Version 2. Wenn dies passiert und die falsche Klasse zurückgegeben wird, erhalten Sie eine ClassNotFound oder eine ähnliche Ausnahme. Das Debugging kann sehr frustrierend sein, da Ihr Code möglicherweise nicht zuverlässig fehlschlägt.

Wenn dies mit Artefakten passiert, wird es als JAR Hell bezeichnet, aber das Prinzip ist das gleiche: Jedes Mal, wenn Sie zwei Kopien einer Klasse mit dem gleichen Paket und Namen haben, fragen Sie nach Ärger.

Ändern Sie stattdessen den Namen von Model1 in einem Ihrer Projekte oder verwenden Sie eine andere Verpackung, um die beiden zu unterscheiden.

Verwandte Themen