In Java gibt es einen einfachen Weg um den Pfad einer laufenden JAR-Datei zu erhalten:
%Vor%Aber in Clojure haben wir keinen Klassennamen , nur Namespace und Funktionen. Gleiches gilt für die nicht kompilierten Skripte / REPL.
Meine Fragen sind also:
Die Idee von classpath besteht darin, zu verbergen, woher Klassen kommen. Möglicherweise haben Sie Klassen mit demselben Namen, die von verschiedenen Klassenladeprogrammen geladen wurden, Sie können dieselbe Klasse in mehreren JARs haben und auf die Klassenpfadordnung zurückgreifen, um die richtige Klasse auszuwählen.
Warum willst du es wissen? Wenn es aus einem anderen Grund als Debug / Logging-Zwecken ist, sind Sie auf gefährlichem Boden und sollten vorsichtig vorgehen.
Tatsächlich ist es für Klassen völlig vernünftig, keine JAR-Datei zu haben. Dies kann in Java für alle von der Laufzeit generierten Klassen passieren (Think Proxies).
In clojure wäre ein einfaches Beispiel, wie es in der folgenden Replikationssitzung gezeigt wird ... Sie werden sehen, dass @mikers Vorschlag für clojure.lang.Atom
funktioniert, was eine eingebaute Klasse ist. Wenn Sie jedoch einen deftype
verwenden, um einen eigenen Typ zu erstellen, generiert clojure eine Klasse und hat keinen Speicherort ...
%Vor%
finde Quelldateien in einem Jar: tools.namespace / clojure -sources-in-jar
Beachten Sie, dass es unbedingt erforderlich ist, .toURI
aufzurufen, um Probleme mit Pfaden zu vermeiden, die Leerzeichen haben, wie in der entsprechenden Java-Frage beschrieben: Wie bekomme ich den Pfad einer laufenden JAR-Datei? .