Clojure: Wie bekomme ich den Pfad eines laufenden JAR / Root-Quellverzeichnisses?

8

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:

  1. Wie können wir einen Pfad zur laufenden jar Datei finden ?
  2. Wie können wir einen Pfad zu nicht kompilierten Quelldateien finden ?
ffriend 14.03.2012, 01:33
quelle

6 Antworten

5

Standardmäßig ist der Name Ihrer Klasse der Name Ihres AOT-kompilierten Namespace (dafür steht gen-class), Sie können also einfach die Klasse des Namespace verwenden.

%Vor%

Ergebnis des Laufens:

%Vor%     
rplevy 07.11.2012 19:43
quelle
2

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%     
sw1nn 15.03.2012 13:09
quelle
1

Ich habe das nicht versucht, aber es scheint, als ob alles, was Sie brauchen, eine Klasseninstanz ist. Also zum Beispiel können Sie das nicht tun:

%Vor%     
Kevin 14.03.2012 01:57
quelle
1

Sie könnten versuchen, den Pfad von einer Klasse zu erhalten, die von Clojure selbst definiert wurde, z. B .:

%Vor%

Ich glaube, das ist technisch die laufende jar-Datei, wenn Sie Clojure-Skripte oder -Codierung an der REPL ausführen.

    
mikera 14.03.2012 02:58
quelle
0

finde Quelldateien in einem Jar: tools.namespace / clojure -sources-in-jar

    
number23_cn 12.06.2012 01:58
quelle
0
%Vor%

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? .

    
Hemaolle 30.10.2017 15:11
quelle

Tags und Links