Prácticas
Práctica 01
El objetivo es crear un proyecto para plantear la forma de trabajar con Emacs.
Crea un directorio para manterner tus proyectos en él,
$HOME/code/clojure
por ejemplo, e ingresa a éĺ:alumno@servidor:~ $ mkdir -p code/clojure alumno@servidor:~ $ cd code/clojure
Crea el proyecto con la plantilla (template) default e ingresa a él:
alumno@servidor:~/code/clojure $ lein new default clojure01 Generating a project called clojure01 based on the 'default' template. The default template is intended for library projects, not applications. To see other templates (app, plugin, etc), try `lein help new`. alumno@servidor:~/code/clojure $ cd clojure01
Es posible el solo ejecutar
lein new clojure01
para hacer uso de la plantilla default.Leiningen ofrece otras plantillas, de momento solo app (para desarrollar una aplicación) y default (para desarrollar una librería) son de interes. Existe una gran cantidad de plantillas disponibles en Clojars.org.
Al terminar contarás con ls siguiente estructura en
clojure01
:alumno@servidor:~/code/clojure/clojure01 $ pwd && tree /home/alumno/code/clojure/clojure01 . ├── CHANGELOG.md ├── doc │ └── intro.md ├── LICENSE ├── project.clj ├── README.md ├── resources ├── src │ └── clojure01 │ └── core.clj └── test └── clojure01 └── core_test.clj 6 directories, 7 files
El archivo
project.clj
es el archivo de definición del proyecto y contiene, entre otras cosas, las dependencias necesarias para él mismo:(defproject clojure01 "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.8.0"]])
IMPORTANTE: si se está haciendo uso de Drip debe modificarse este archivo para indicar su uso mediante el keyword
java-cmd
endefproject
:(defproject clojure01 "0.1.0-SNAPSHOT" :java-cmd "drip" :description "FIXME: write description" ...)
Inicia a Emacs estando en el directorio
~/code/clojure/clojure01
(emacs .
) y aprieta el juego de teclasM-x cider-jack-in RET
para iniciar un servidor-cliente de nREPL ofrecido por CIDERLa manera en como uno programa en Clojure mediante Leiningen, Emacs y CIDER (REPL)se puede leer en:
Práctica 02
El objetivo es crear un proyecto para iniciar una aplicación, Leiningen ofrece la tarea (task) new y la plantilla (template) app para esto.
Crea el proyecto con la plantilla (template) app e ingresa a él:
alumno@servidor:~ $ cd code/clojure alumno@servidor:~/code/clojure $ lein new app clojure02 Generating a project called clojure02 based on the 'app' template. alumno@servidor:~/code/clojure $ cd clojure02
Al terminar contarás con la siguiente estructura en
clojure02
:alumno@servidor:~/code/clojure/clojure02 $ pwd && tree /home/alumno/code/clojure/clojure02 . ├── CHANGELOG.md ├── doc │ └── intro.md ├── LICENSE ├── project.clj ├── README.md ├── resources ├── src │ └── clojure02 │ └── core.clj └── test └── clojure02 └── core_test.clj 6 directories, 7 files
El archivo
project.clj
es el archivo de definición del proyecto y contiene, entre otras cosas, las dependencias necesarias para él mismo:(defproject clojure02 "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.8.0"]] :main ^:skip-aot clojure02.core :target-path "target/%s" :profiles {:uberjar {:aot :all}})
IMPORTANTE: si se está haciendo uso de Drip debe modificarse este archivo para indicar su uso mediante el keyword
java-cmd
endefproject
:(defproject clojure02 "0.1.0-SNAPSHOT" :java-cmd "drip" :description "FIXME: write description" ...)
El aspecto a resaltar es el uso de
clojure02.core
como namespace principal (:main
) por lo que en él se espera la existencia de una función con nombre-main
que será el punto de inicio de esta aplicación:(defn -main ... [& args] ...)
Puedes encontrar todas las opciones disponibles en https://github.com/technomancy/leiningen/blob/stable/sample.project.clj.
Hasta este punto uno tiene las siguientes tareas (task) de Leiningen disponibles:
lein deps
: descarga las dependencias establecidas mediante:dependencies
.lein repl
: inicia un REPL de acuerdo al proyecto actual.lein run
: ejecuta el proyecto (función-main
del namespace principal.lein test
: ejecuta los tests del proyecto (archivos con extensión.clj
dentro del directoriotest
).lein compile
: compila el proyecto (archivos con extensión.clj
dentro del directoriosrc
en el directoriotarget
).lein clean
: borra los archivos generados durante la compilación del proyecto (archivos dentro del directoriotarget
).lein uberjar
: genera un archivo JAR (Java Archive) que incluye el código fuente-compilado del proyecto y sus dependencias. El archivo generado es depositado en el directoriotarget/uberjar
con nombreclojure02-0.1.0-SNAPSHOT-standalone.jar
y su ejecución sería con el comandojava -jar target/uberjar/clojure02-0.1.0-SNAPSHOT-standalone.jar
.