clojure - instalar - Complemento de Leiningen a nivel de proyecto
instalar clojure (2)
La respuesta breve es "no", pero todavía es bastante fácil definir una tarea a nivel de proyecto: Agregar :eval-in-leiningen true
a su definición de defproject
y mover la definición de la tarea a src/leiningen/foo.clj
.
En las versiones 1.xx de Leiningen, pude definir una tarea lein foo
válida solo en un proyecto individual al poner lo siguiente en el proyecto de project.clj
:
(defproject tester "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.4.0"]])
;; Create a task, "foo"
(ns leiningen.foo
(:require (leiningen [uberjar :as uberjar])))
(defn foo [project & args]
(println "Do something here first, then make the uberjar.")
(uberjar/uberjar project))
Puede obtener un poco más de información sobre esto aquí:
http://nakkaya.com/2010/02/25/writing-leiningen-plugins-101/
En 2.xx, ya no puedo hacer esto (es decir, me pongo ''foo'' is not a task.
Parece demasiado, demasiado para mí tener que comenzar un proyecto separado para esta tarea. ¿Todavía es posible? para definir una tarea dentro de project.clj para leiningen 2.xx?
Puede hacerlo utilizando .lein-classpath
para apuntar a un directorio fuera de src
contenga las tareas. Por ejemplo, si tiene el complemento en src/leiningen/foo.clj
, puede hacerlo en la raíz del proyecto:
$ mkdir tasks
$ mv src/leiningen tasks/
$ echo tasks > .lein-classpath
La razón por la que puede querer evitar :eval-in-leiningen true
es que tiene algunos comportamientos divertidos cuando intenta hacer compilación AOT para una clase main
. Específicamente, obtienes:
Compilation failed: java.io.IOException: No such file or directory, compiling:(testproj/core.clj:1)
Al intentar compilar / ejecutar incluso un ejemplo de prueba simple. Mas información en: