Ich habe zwei Java-Projekte, mit ANT gebaut, namens Projekt A und B, die ich in Luna Eclipse (die Java EE-Version) erstellt. Die Paketstruktur ist wie folgt:Inheritance Konflikt zwischen Java-Ant-Projekten
Project A
|
src
|
SomePackage
|
A.java
Project B
|
src
|
AnotherPackage
| |
| B.java
|
SomeOtherPackageInSrc
|
C.java
wo A, B und C nicht abstrakte POJOs sind. Ich habe auch die folgende Erbschaft Struktur: C erweitert B, B erweitert A. Ich fügte eine öffentliche Methode zu A hinzu, damit seine Kinder es haben konnten. Ich habe dann Projekt A erstellt und das resultierende JAR dem Build Path des Projekts B hinzugefügt. Ich bemerkte, dass C nicht auf die neue Methode zugreifen konnte. Ich fügte dann die Quell-JAR an den Build-Pfad an, betrachtete die Quelle für A.java und die neu hinzugefügte Methode war vorhanden. Ich habe eine Reihe von Dingen ausprobiert, und das Hinzufügen von Projekt A zu Deployment Assembly von Projekt B erlaubt C, die neue Methode von A zu sehen. Warum bietet das einfache Erweitern der Klasse und das Hinzufügen des Jars, in dem die erweiterte Klasse lebt, keine Sichtbarkeit für öffentliche Methoden in dieser Fall?
Das ist die Sache. C.java kompiliert nicht, wenn ich die in A.java neu hinzugefügte Methode referenziere. Ich sehe keine Kompilierungsfehler in Eclipse, aber wenn ich mit ANT baue, wird der Aufruf der neuen Methode nicht kompiliert, was mit einem Symbolfehler fehlschlägt. Nach diesem [http://stackoverflow.com/questions/11463354/how-to-put-a-jar-in-classpath-in-eclipse] Vorschlag, schaute ich auf den Java Build Path Tab in Eclipse und machte sicher, dass die JAR aus Projekt A unter Bestellung und Export ausgewählt wurde. Die source.jar für Projekt A zeigt die neue Methode, also würde ich denken, dass sie auch in A.jar enthalten ist. – DivDiff