martedì 27 dicembre 2011

Librerie Clojure e costruisce con Leiningen

Leiningen è uno strumento di automazione per progetti Clojure: mentre si potrebbe, in teoria, continuare ad usare Ant e Maven direttamente per scaricare le dipendenze JAR ed eseguire operazioni quali la suite di test del progetto, Leiningen permette di scrivere solo il codice Clojure, e generare al volo tutto il resto.
In breve, Leiningen utilizzerà Ant e Maven sotto le coperte, e seguire il modello di Maven di download e cache delle dipendenze a livello globale, invece di immagazzinarli insieme al codice sorgente. Ma non si vedrà sotto il cofano.

Installazione

Supponendo che si sta utilizzando un sistema Linux come Ubuntu e la copia Clojure spediti, l'installazione del Leiningenpacchetto vi porterà il lein comando.
In alternativa, è possibile scaricare un singolo script dal raccoglitore / cartella, posto sul vostro percorso e renderlo eseguibile. Alla prima esecuzione verrà bootstrap si scaricando le dipendenze mancanti.
Ci sono anche istruzioni di installazione per le scatole di Windows, sia per la versione autoinstallante e uno stand-alone.

Una guida: creare un nuovo progetto

Leiningen in grado di creare uno scheletro semplice per il nostro progetto:
01.[08:37:53] [giorgio @ Desmond: ~ / code] $ lein nuovo Clojure-midje-esempio
02.Creato nuovo progetto in : / home / giorgio / code / Clojure-midje-esempio
03.[08:38:01] [giorgio @ Desmond: ~] $ cd Codice / Clojure-midje-esempio
04.[08:38:29] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio] $ albero
05..
06.├ ─ ─ project.clj
07.├ ─ ─ README
08.├ ─ ─ src
09.│ └ ─ ─ clojure_midje_example
10.│ └ ─ ─ core.clj
11.└ ─ ─ prova
12.└ ─ ─ clojure_midje_example
13.└ ─ ─ prova
14.└ ─ ─ core.clj
15. 
16.5 directory, 4 file
Vediamo un test e la cartella src, nel migliore Java / JVM tradizione. Il file sorgente creato come esempi seguire la struttura della cartella come namespace:
1.[09:00:17][giorgio@Desmond:~/code/clojure-midje-example]$ cattest/clojure_midje_example/test/core.clj
2.(ns Clojure-midje-esempio. prova . nucleo
3.(: usare [Clojure-midje-example.core])
4.(: usare [. Clojure prova ]))
5. 
6.(deftest sostituire-me; FIXME: scrivere
7.(è falso "Nessun test sono stati scritti". ))
Si può già provare ad eseguire il test in mancanza:
01.[09:02:52] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio] $ lein prova
02.Copia 1 del file in / home / giorgio / code / Clojure-midje-example / lib
03.Testing Clojure-midje-esempio. prova . nucleo
04.FAIL in (sostituire-me) (core.clj: 6)
05.Nessun test sono stati scritti.
06.atteso: falso
07.effettiva: falso
08.Ran 1 test contenente 1 asserzioni.
09.fallimenti 1, 0 errori.
E, naturalmente, scrivere un vero banco di prova:
01.[09:05:05][giorgio@Desmond:~/code/clojure-midje-example]$ cattest/clojure_midje_example/test/core.clj
02.(ns Clojure-midje-esempio. prova . nucleo
03.(: usare [Clojure-midje-example.core])
04.(: usare [. Clojure prova ]))
05. 
06.(deftest il-semplice- prova -you-can-scrittura
07.(è 3 (+ 1 2)))
08.[09:05:08] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio]. $ lein testTesting Clojure-midje-esempio di test . nucleo
09.Ran 1 test contenente 1 asserzioni.
10.0 errori, 0 errori.
Leiningen produce anche un file. Gitignore che permette di ignorare le classi compilate, qualsiasi tipo di JAR, XML generato e metadati del proprio Leiningen.

L'installazione di una libreria: Midje

Midje è un ambiente di test per Clojure, che voglio installare sia per essere in grado di provare più tardi e per dimostrare come Leiningen può tirare in una libreria.
Il file project.clj contiene tutte le definizioni delle dipendenze che Leiningen utilizzerà per afferrare JAR. Il formato di: dipendenze è un elenco di 2-elemento liste, in cui ogni 2-elemento della lista contiene il nome della biblioteca e la versione necessaria come una stringa.
1.[09:06:11] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio] $ cat project.clj
2.(defproject Clojure-midje-esempio "1.0.0-snapshot"
3.: descrizione "FIXME: scrivere descrizione"
4.: le dipendenze [[org.clojure / Clojure "1.2.1" ]])
Per impostazione predefinita, Leiningen sarà recuperare dei pacchetti Clojars, il repository principale per la comunità biblioteche Clojure, e da Maven centrale.
Facciamo fissare i nostri project.clj per includere midje e midje-lein, due JAR che renderanno Midje a disposizione del progetto corrente. La prima è la biblioteca reale, mentre il secondo fornisce il lein midje comando, una versione più bello di prova lein.
1.[09:12:52] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio] $ cat project.clj
2.(defproject Clojure-midje-esempio "1.0.0-snapshot"
3.: descrizione "FIXME: scrivere descrizione"
4.: le dipendenze [[org.clojure / Clojure "1.2.1" ]
5.[midje "1.3.0" ]]
6.: dev-dipendenze [[lein-midje "1.0.7" ]])
Ho messo in midje: dipendenze solo per mostrare una diversa opzione per le biblioteche, ma dovrebbe in realtà essere messo in: dev-dipendenze. La differenza è in quest'ultimo caso non sarà spedito nel pacchetto JAR del progetto, né essere tirato in progetti che dipendono da quello attuale.
Per convalidare la disponibilità di midje, scriviamo il test più semplice midje:
01.[09:17:04][giorgio@Desmond:~/code/clojure-midje-example]$ cattest/clojure_midje_example/test/core.clj
02.(ns Clojure-midje-esempio. prova . nucleo
03.(: usare [Clojure-midje-example.core])
04.(: usare [. Clojure prova ])
05.(: usare [midje.sweet]))
06. 
07.(deftest il-semplice- prova -you-can-scrittura
08.(è 3 (+ 1 2)))
. 09(fatto (+ 1 2) = & gt ; 3)
10.[09:16:55] [giorgio @ Desmond: ~ / code / Clojure-midje-esempio] $ lein midje & gt ; &gt ; & gt .; Clojure prova sommario:
11.Ran 1 test contenente 1 asserzioni.
12.0 errori, 0 errori.
13.gt ; & gt ; & gt ; sintesi Midje:
14.Tutti i fatti sosteneva (1) sono state confermate.

Lein comandi più

Ho postato questo esempio su Github , sia per il vostro futuro mio e di riferimento.
Per quelli di voi che non provengono da un background JVM, non tenta di eseguire i file CLJ in isolamento:. lein dovrebbe sempre essere usato come un wrapper per lui per poter piazzare le dipendenze nel classpath.
Lein fornisce molti altri comandi per questo obiettivo, ad esempio:
  • Lein eseguire chiamerà il -principale funzione nello spazio dei nomi definito con: principali project.clj (è facile dimostrare che spiegare:. vedere il codice sorgente)
  • aiutare lein eseguire visualizzerà le informazioni sul comando run; sostituire il comando preferito per imparare tutte le sue opzioni e come interagisce con project.clj.
  • Lein vaso e lein uberjar produrrà un JAR e un JAR autonomo rispettivamente per la distribuzione di codice.

Conclusioni

Tu non lo vedi in questo campione di uscita, ma lein midje fornisce anche i colori (una barra verde), in quanto è un'attività personalizzata Leiningen. L'utilizzo effettivo di Midje è fuori della portata di questo articolo, ma spero di aver fornito un modo semplice per afferrare dipendenze all'interno del progetto.
Lein è facile da usare, e fornisce una documentazione sufficiente per casi d'uso di base, si integra in test come un compito di prima classe. Tuttavia i messaggi di errore sono un po 'criptico, e questo è tipico di Clojure: assicuratevi di fare piccoli passi al fine di individuare facilmente eventuali errori nelle ultime righe che hai scritto.