2012-09-21 7 views
9

Ich versuche clojure an meinem zweiten Tag und ich verstehe noch fast nichts. Ich arbeite mit der Programmierung Clojure 2. Ausgabe. und ich stecke mit Bibliotheken fest.kann keine neue Clojure-Bibliothek laden

Ich habe Leiningen und habe die REPL läuft. Das Buch sagt zuerst, dass der Leser eine einfache Funktion ausführen muss (ich bekomme eine Null). Dann will er eine Datei introduction.clj, indem Sie einen anderen einfachen

(require 'examples.introduction) 

, wo ich einen Fehler Nachricht

FileNotFoundException Could not locate clojure/java/introduction__init.class 
or clojure/java/introduction.clj on classpath: clojure.lang.RT.load (RT.java:432) 

ich die introduction.clj Datei heruntergeladen genannt laden und sah, wo sollte ich es platzieren. Der Fehler und das Buch sagt der Befehl wird in meinem Klassenpfad suchen, aber ich habe keine Ahnung, wo oder was das ist (nach 1h des Suchens und Lesens bekomme ich es immer noch nicht, tut mir leid). Ich habe ein paar Befehle ausgeführt, und ich hatte viele Klassenpfade aufgelistet (von denen keiner eine clojure/java/io.clj enthält).

Also habe ich versucht, einen anderen Ansatz - die io.clj Datei auf meiner Festplatte finden und einfach die Datei dort kopieren und mit einem

(require 'clojure.java.introduction) 

Dies auch nicht zu funktionieren scheint Befehl ausführen. Übrigens, die io.clj-Datei, die ich gefunden habe, war in "C: \ Programme \ clojure \ src \ clj \ clojure \ java". Ich habe versucht, mehrere andere .clj-Dateien aus dem Java-Ordner sowie aus dem clojure-Ordner auszuführen, wie zB javadoc.clj oder inspector.clj, und alle scheinen mit dem oben erwähnten Befehl gut zu funktionieren. Nur die neue Datei scheint nicht so geladen zu werden.

geschätzt Jede Hilfe :)

+0

Was ist das Beispiele.Einleitung? ein Glas oder eine Clj-Datei? – ssedano

Antwort

6

Clojure auf der Java Virtual Machine ausgeführt wird, so dass Sie ein wenig über PATH und CLASSPATH Konzepte lernen müssen:

See: http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

In Bezug auf die Fehlermeldung erwartet die Clojure-Laufzeit introduction.clj im Verzeichnis clojure\java\example\introduction.clj (nicht dort, wo es wirklich sein sollte - siehe unten).

Die Konvention für Clojure-Namespaces besagt, dass die letzte Komponente der Dateiname ist, während alle vorherigen Komponenten übergeordnete Verzeichnisse sind. So

clojure.java.introduction 

würde im Verzeichnis (in Bezug auf Ihre Quelle "root" oder Classpath)

clojure\java\introduction.clj 

sein (Die lein REPL fügt automatisch Ihre Quelle Wurzel zu dem Classpath).

Ein anderes Konzept, das Sie verstehen müssen, ist, wo sich die "Wurzel" Ihres Quellcodes befindet. Für Leiningen (das Build-Tool, das Sie verwenden) ist der Standard entweder "src" oder "src/main/clojure" - wie im Leiningen sample project file on GitHub dokumentiert. Wenn Sie wirklich stecken bleiben, scheint es das komplette Projekt für das Buch is available on GitHub zu sein.

am Projekt Sehen, ich sehe, dass Sie tatsächlich die Datei unter src\examples\introduction.clj platzieren sollte

+0

Danke für die Antwort, ich lese das Dokument über die Pfade und Klassenwege und es half ein bisschen. Das Problem bleibt jedoch bestehen. Ich habe versucht, die Datei buchstäblich überall im Hauptordner (und in Unterordnern) des Clojures zu platzieren und es funktioniert einfach nicht. '' examples.introduction' funktioniert nicht, '' clojure.examples.introduction' funktioniert nicht, kurz gesagt, ich habe nicht das Gefühl, dass dies das Problem ist. Jede andere clj-Datei wird korrekt aus den Ordnern geladen, aber wenn ich die Datei Einführung.clj dorthin lege, kann sie nicht gefunden werden. Irgendwo. Kann es einen anderen Grund dafür geben? Ich weiß wirklich nicht, was ich tun soll. Danke – xificurC

+1

Sie brauchen auch '(ns examples.introduction)' am Anfang der clj-Datei. Der Namespace in der Datei muss im Allgemeinen mit dem Speicherort im Dateisystem übereinstimmen. Wenn Sie die Clojure-Quelle nicht zuvor kompiliert und in eine Java-Klasse verpackt haben (Sie können später darauf zugreifen). – noahlz

+0

Auch das hilft nicht. Ich habe sogar versucht, die Datei Einführung.clj in den gleichen Ordner zu kopieren, in dem sich die Datei io.clj befindet. Das funktioniert mit dem Befehl '(require 'clojure.java.io)' und in der ersten Zeile steht 'ns clojure.java.io'. Also habe ich die erste Zeile der Datei "introduction.clj" in "ns clojure.java.introduction" geändert. Ich meine, das sollte funktionieren, oder? Nun, selbst das tut es nicht. Gleicher Ordner, derselbe Pfad, aber es funktioniert nicht. Ich fange an zu denken, dass ich auf die Installation verzichtet habe, obwohl Leiningen sich um alles kümmern sollte, nicht? – xificurC

0

Liest du das Buch „Programming Clojure“?

Ich habe das gleiche Problem festgestellt. Es Verbot sovled wie folgt:

  1. Wenn Sie clojure von Java starten: ich in den Fenstern arbeiten, die clojure.jar in D platziert wird: \ backup \ clojure-1.5.1, und der Quellcode der Das Buch "Programming Clojure" befindet sich in D: \ study \ clojure \ shcloj-code \ code. Sie sollten zuerst die Datei user.clj im Ordner D: \ study \ clojure \ shcloj-code \ code löschen.

java -cp d: \ backup \ clojure-1.5.1 \ clojure-1.5.1.jar; d: \ Studie \ clojure \ shcloj-Code \ code clojure.main -r

Wenn Du arbeitest in Linux, ersetze das ";" mit ":"

  1. Wenn Sie clojure von lein starten Sie sollten erste CD mit dem D: \ Studie \ clojure \ shcloj-Code \ code Ordner und dann

lein repl

Sie sollten auch die Datei user.clj im Ordner D: \ study \ clojure \ shcloj-code \ code löschen.

Verwandte Themen