2013-02-08 15 views
14

A quanto ho capito, quando eseguo il comando nrepl-jack-in viene caricato un REPL insieme a tutte le dipendenze definite in project.clj. Se poi aggiorno project.clj per aggiungere una nuova dipendenza, devo uccidere il server ed eseguire nuovamente nrepl-jack-in o c'è modo di aggiornare le dipendenze nel REPL corrente?Come aggiorno le dipendenze Clojure quando si lavora con nrepl.el?

risposta

5

Aggiornamento: Forse c'è qualche speranza, Vedere https://github.com/cemerick/pomegranate

precedenza:

La risposta è sì - che c'è bisogno di riavviare il processo di JVM.

Non sono a conoscenza di un buon modo per aggiornare le dipendenze in un live repl. Leiningen (chiamato da nrepl-jack-in) gestirà le dipendenze e imposterà il classpath solo al riavvio. Cercare di fare qualcosa di dinamico e intelligente è orribilmente fragile.

Il testo ha colpito qui di seguito è di fatto vero, ma su di un momento di riflessione sembrava tale consulenza male mi hanno segnato in su come tale ...

Se si dispone di una dipendenza locale (ad esempio file jar) si potrebbe utilizzare il lungo periodo deprecato funzione add-classpath presso il repl. Ma entrerai nella caverna infestata dai draghi dei classloader java.

1

Prima che il melograno esistesse, ho scritto la mia libreria per caricare dinamicamente le dipendenze.

https://github.com/bmillare/dj

Dopo l'uscita di lein2 e come sotto le coperte possono utilizzare pomegrante, ho riscritto dj di utilizzare questo sotto. Quindi, anche se non si usa 'dj', potrebbe essere utile come riferimento per vedere che cosa sta facendo.

0

Il riavvio del REPL sembra essere il modo più semplice. Questo può essere fatto con :

M-x cider-restart 

Ciò appare anche per realizzare un lein deps. Pertanto, l'intero processo di aggiungere una nuova dipendenza comporta semplicemente l'aggiunta di require a il project.clj e quindi il richiamo di cider-restart.


Altro (molto conveniente) modo è usare clj-refactor. Aggiunta del artefatto (C-c m a p o cljr-add-project-dependency) richiederà la versione che si desidera, automaticamente mettere la nuova dipendenze nel file project.clj e ricaricare la sessione.

Problemi correlati