2012-09-02 9 views
11

En Leiningen versiones 1.xx yo era capaz de definir una tarea lein foo válida únicamente en un solo proyecto, colocando lo siguiente en ese proyecto de project.clj:a nivel de proyecto Leiningen Plugin

(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 ser un poco más información sobre esto aquí:

http://nakkaya.com/2010/02/25/writing-leiningen-plugins-101/

En 2.xx, no soy capaz de hacer esto más (es decir, consigo 'foo' is not a task. parece muy, muy excesivo para mí tener que iniciar un proyecto independiente para esta tarea. ¿Todavía es posible definir una tarea dentro de project.clj para leiningen 2.x.x?

Respuesta

5

La respuesta corta es "no", pero todavía es bastante fácil de definir una tarea de nivel de proyecto: Añadir :eval-in-leiningen true a su definición defproject y mover la definición de tareas para src/leiningen/foo.clj.

+0

Lo sentimos, no hay dados. Encontré ese consejo, también, y no parece hacer nada en este caso. He actualizado mi pregunta con un 'project.clj' completo para completar el ejemplo. Gracias por el esfuerzo. – charleslparker

+0

No me di cuenta de que tenía su definición de "foo" dentro de su archivo project.clj. Actualicé mi respuesta con la respuesta correcta (con suerte) – DanLebrero

+0

¡Eso lo hizo! Es un poco más doloroso, pero aún así no está mal. ¡Gracias! – charleslparker

4

Puede hacerlo utilizando .lein-classpath para apuntar a un directorio fuera de src que contenga las tareas. Por ejemplo, si usted tiene el plugin de src/leiningen/foo.clj, se puede hacer, en la raíz del proyecto:

$ mkdir tasks 
$ mv src/leiningen tasks/ 
$ echo tasks > .lein-classpath 

La razón es posible que desee evitar :eval-in-leiningen true es que tiene algunos comportamientos divertidos cuando se está tratando de hacer AOT compilación para una clase main. Específicamente, obtiene:

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. Más información en:

https://github.com/technomancy/leiningen/issues/769

+6

¿Cómo se especifican las bibliotecas/deps requeridas por su tarea? – oshyshko

Cuestiones relacionadas