Wie in dieser Thread scala -cp <classpath> ... gestartet; kann auf <classpath>
als String zugegriffen werden und dazu verwendet werden, die eingebettete REPL zu initialisieren? (Der Klassenpfad Java , der über System.getProperty("java.class.path")
verfügbar ist, unterscheidet sich vom Scala-Klassenpfad.)
Alternativ kann die eingebettete Scala REPL ihren ClassLoader vom übergeordneten Prozess erben oder konstruieren (Michael Dürigs ScalaDays 2010 Talk könnte relevant sein). Ist das der empfohlene Ansatz?
Ich versuche, das Gleiche zu tun, und ich habe gerade einen Weg gefunden, mein herauszubekommen Googeln :
%Vor%Der obige Code ruft den Klassenpfad im aktuellen Kontext ab.
%Vor% Setze das in deine settings.classpath
und du solltest in der Lage sein, den Versand oder eine andere benötigte Bibliothek zu starten.
Es scheint keinen einfachen Weg zu geben, den "Scala-Klassenpfad" aus einem laufenden Scala-Programm heraus aufzurufen (im Gegensatz dazu ist der "Java-Klassenpfad" über die Systemeigenschaft java.class.path
verfügbar). Man möchte z. B. auf das Feld Calculated.userClasspath
in der Instanz scala.tools.PathResolver
zugreifen, aber Letzteres scheint nicht zugänglich zu sein. Am einfachsten ist es vielleicht, das Startskript scala
so zu ändern, dass die Zeichenfolge -classpath
in einer Umgebungsvariablen gespeichert wird.
Unter der Annahme, dass der gewünschte Scala-Klassenpfad bestimmt werden kann, kann er an den eingebetteten Scala-Interpreter übergeben werden über:
settings.classpath.value = ...
Update : Obwohl die Scala-Klassenpfad-Zeichenfolge möglicherweise nicht direkt aus der Scala-Laufzeit erreichbar ist, weist @Eugene darauf hin, dass sie aus dem Kontext-Classloader extrahiert werden kann. Danke.
Tags und Links scala