Ich arbeite an einem Scala-Projekt, das zwei Java-Bibliotheken importiert. Durch schlechte Planung haben die beiden Java-Bibliotheken ähnliche Paketnamen, einen mit com auf der Vorderseite, einen ohne.
Das Problem ist, dass Scala zuerst nach dem Paket mit com sucht und mir sagt, dass das Paket nicht existiert. Wenn ich alle Referenzen auf die Bibliothek mit com vor dem Paket entferne, funktioniert die Kompilierung.
Um ein Beispiel zu zeigen, das Sinn macht:
In foo.jar haben wir ein Paket company.product.core
In bar.jar haben wir ein Paket com.company.product.other.
Wenn beide Gläser im Klassenpfad sind, die Zeile:
%Vor%Scheitert mit dem Fehler "value core ist kein Mitglied von Paket com.companyname.product" Wenn wir bar.jar entfernen, funktioniert die Kompilierung einwandfrei.
Scala versucht mich vor der Eingabe von com zu retten? Gibt es eine Möglichkeit, es zu sagen, nur das zu importieren, was ich ihm erzähle?
Verwenden Sie _root_
Präfix in Importanweisungen. Es macht die Paketauflösung absolut.
Bezug nehmend auf Ihren Kommentar: Mit relativen Importen könnten Sie so etwas machen. Es erspart Ihnen im Grunde ein wenig Tipparbeit.
%Vor% Ich nehme an, dass der Ort, an dem Sie diese Importlinie platzieren, zu einem Paket gehört, das mit " com.
" beginnt, wie folgt:
Das bedeutet, dass% com.
, einschließlich com.company
, Teil des Bereichs ist und dass com.company
daher das company
, das root ist, abdeckt, da Objekte, die näher im Hierarchiebereich liegen, diese weiter abdunkeln .
Was auch immer es wert ist, Scala 2.8 wird leicht unterschiedliche Regeln haben. Jetzt, wenn ich mein Paket als definieren:
%Vor% dann nur a
wird im Geltungsbereich sein. Wenn ich das vorherige Verhalten erhalten möchte, muss ich Folgendes tun: