2016-04-20 11 views
0

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?

Antwort

0

Ich nehme an, nur das Erweitern und Hinzufügen des Projekts zu Ihrem Klassenpfad wird es kompilieren, aber es ist nicht automatisch in der resultierenden Bereitstellungseinheit (EAR/WAR). Dies macht die Klassen zur Laufzeit nicht verfügbar.

+0

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

0

Ich habe das Problem gefunden. Ich hatte mehrere Versionen des Project A JAR auf meinem Classpath, und der Compiler nahm das alte JAR statt des neuen auf. Anfängerfehler.