2015-01-28 5 views
5

Ich versuche, Kris Jenkins Yesql-Bibliothek in meinem Test Clojure-Projekt zu verwenden. Ich habe eine Beispieldatei queries.sql mit einer einzigen Abfrage erstellt. Single core.clj Datei sieht wie folgt aus (precalc der Name des Testprojekts ist):Clojure Yesql nicht in der Lage, Abfragen Datei

(ns precalc.core) 
(require '[yesql.core :refer [defqueries defquery]]) 

(println (defqueries "resources/queries.sql")) 
(defquery col-type "resources/queries.sql") 
(slurp "resources/queries.sql") 

Bei dem Versuch, zum Beispiel zu bewerten 4 line, erhalte ich

;!!CompilerException java.io.FileNotFoundException: resources/queries.sql, compiling:(precalc/core.clj:4:10)

Ich habe versucht Putting queries.sql in Stammordner des Projekts als gut, aber ohne Erfolg. Schlürfen funktioniert jedoch. Mein Fehler muss sehr offensichtlich sein. Kann mir bitte jemand helfen?

Ich benutze Leiningens Replik, Macvim und Tim Popes vim-Kamin Plugin, verbunden über Cider-nrepl.

Danke!

Antwort

9

Die Datei muss auf Ihrem Classpath sein, die Sie

lein classpath 

Blick auf die ersten paar Einträge mit zeigen können, werden sie auf diese aussehen:

/git/project/test:/git/project/src:/git/project/dev-resources:/git/project/resources:... 

Da Sie bereits gesetzt es in resources, du bist eingestellt. Der wichtige Punkt ist jedoch, dass der Pfad, den Sie defqueries passieren relativ zu Classpath sein muss, so in Ihrem Fall in Bezug auf resources:

(defqueries "queries.sql") 

slurp funktioniert, weil es direkt auf Ihrem Dateisystem arbeitet, nicht nur auf dem Klassenpfad. Da Sie Ihre REPL im Projektstamm gestartet haben, ist resources/queries.sql ein vollkommen gültiger Pfad.

+0

Wow! Es klappt! Vielen Dank! Mir war nicht bewusst, dass Yesql relative Pfade brauchen würde. Ich habe es an den falschen Stellen gejagt - lein classepath enthält keinen Projektstammordner, also wurde ich in die Vorstellung getäuscht, dass das Verschieben von queries.sql in den root tatsächlich etwas bewirkte. – siphiuel