2012-07-25 14 views
11

Così ho questo problema del flusso di lavoro:Come possono le nuove librerie Clojure essere caricata nel repl

Sono felicemente digitando via sul mio progetto clojure repl e rendersi conto che ho bisogno di un'altra libreria che non è nel mio project.clj, dire in questo caso, avevo bisogno della libreria tools.cli.

apro project.clj nel mio editor e aggiungere una voce al :dependencies

 [org.clojure/tools.cli "0.2.1"] 

Poi, all'interno della directory di progetto, di tipo I lein deps nella shell per tirare le librerie necessarie

Dopo le dipendenze del progetto vengono estratte, tecnicamente tutti i file di classe sono già pronti per essere caricati, ma se torno al mio repl e digito:

> (use 'tools.cli) 

ottengo questo:

=>> FileNotFoundException Could not locate tools/cli__init.class 
    or tools/cli.clj on classpath: clojure.lang.RT.load (RT.java:432) 

Così avrei dovuto riavviare il repl, sprecando un mucchio di tempo riconfigurare lo stato della repl a dove ero prima mi serviva biblioteca.

C'è un modo per caricare dinamicamente la libreria? ad esempio, dopo aver eseguito lein deps ho solo tornare alla repl e digitare:

> (load-library "tools.cli") 
> (use 'tools.cli) 

Grazie in anticipo

+2

Vedi http://stackoverflow.com/questions/11327624/load-a-new-dependency-in-slime/ – georgek

+0

grande . questo lo ha risolto. – zcaudate

risposta

7

melograno è per voi:

https://github.com/cemerick/pomegranate

Esso supporta il download e l'aggiunta di nuove dipendenze in fase di runtime, ad esempio:

(add-dependencies :coordinates '[[incanter "1.2.3"]] 
        :repositories (merge cemerick.pomegranate.aether/maven-central 
             {"clojars" "http://clojars.org/repo"})) 
0

si può provare una libreria in il repl usando lein-try.

~/.lein/profiles.clj:

{:user {:plugins [[lein-try "0.4.3"]]}}

command line:

$ lein try clj-time "0.5.1" 
Fetching dependencies... (takes a while the first time) 
lein-try loaded [clj-time "0.5.1"] 

nREPL server started on port 57036 
REPL-y 0.2.0 
Clojure 1.5.1 
    Docs: (doc function-name-here) 
      (find-doc "part-of-name-here") 
    Source: (source function-name-here) 
Javadoc: (javadoc java-object-or-class-here) 
    Exit: Control+D or (exit) or (quit) 

user=> 
Problemi correlati