2013-07-25 4 views
14

Diciamo che era hacking su una libreria clojure usavo nel mio progetto:È possibile che leiningen carichi il codice della libreria dall'origine verificata localmente?

/utente/SCDF/Codice/myproject/
/utente/SCDF/Codice/altri-popoli-progetti/clojure- biblioteca-clonato-da-github

Attualmente, quando faccio i cambiamenti in clojure-library-cloned-from-github ho poi corro lein install a spingere la mia nuova versione nel repository locale (ho cambiato la mia e la loro project.clj per puntare ad una nuova versione -SNAPSHOT della libreria in modo che venga aggiornato ogni volta) e quindi riavvia/esegui lein deps su myproject.

C'è un modo per dire a leiningen di cercare in ../../clojure-library-cloned-from-github il codice sorgente per la libreria invece di usare un pars e i vasi, in modo che quando apporto le modifiche al codice vengano visti in fase di esecuzione?

risposta

18

Controlla la funzionalità di Leiningens checkout dependencies.

Fondamentalmente, si crea un collegamento simbolico alla directory della libreria in una sottodirectory chiamata "checkouts" del progetto corrente e lo si aggiunge al profilo Leiningen. Ora anche questo progetto viene caricato ogni volta che il programma viene avviato da Leiningen (REPL, esecuzione).

Se si utilizza Windows, anziché creare un collegamento simbolico, è necessario rendere l'equivalente NTFS di un collegamento simbolico a una directory, denominato "junction point".

Fare attenzione che questo non funzioni se il progetto non viene effettivamente avviato tramite Leiningen (ad esempio in Eclipse/CounterClockWise). Se si esegue CounterClockWise, è necessario aggiungere la libreria desiderata come progetto Eclipse, quindi modificare le proprietà del progetto Eclipse del proprio progetto: In Percorso build Java> Progetti, aggiungere il progetto della libreria.

Ora se si avvia da Eclipse REPL, la libreria verrà inclusa nel percorso classe java. Tuttavia, se si desidera che il progetto funzioni anche attraverso Leiningen, è necessario utilizzare anche la funzionalità dei checkout.

Ovviamente, ogni volta che si desidera creare una versione autonoma del programma, la modalità di pagamento non funzionerà più e sarà necessario includere la libreria come dipendenza normale o includere una versione integrata nel proprio uberjar.

+0

Domanda laterale, non confonderebbe git? Su 'nix immagino che sappia dei soft link e puoi dire di non seguirli, ma i punti di giunzione su NTFS non sono sostanzialmente trasparenti? Suppongo che tu aggiunga 'checkouts /' a '.gitignore' – SCdF

+0

Sì, il checkout è una funzionalità di sviluppo locale. Ecco perché è necessario aggiungere effettivamente la libreria nelle dipendenze del progetto, la versione di checkout viene semplicemente preferita su di essa. Quindi ignorarlo nella tua versione è una buona idea. – NielsK