2012-09-02 9 views
11

In Leiningen versioni 1.xx sono stato in grado di definire una lein foo compito valida solo in un unico progetto mettendo seguente in quel del progetto project.clj:Progetto a livello 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)) 

È possibile ottenere un po 'di più informazioni su questo qui:

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

In 2.xx, io non sono in grado di farlo più (vale a dire, ho 'foo' is not a task. sembra molto, molto eccessivo per me avere per iniziare un progetto separato per questo compito. È ancora possibile definire un'attività all'interno di project.clj per leiningen 2.x.x?

risposta

5

La risposta breve è "no", ma è ancora abbastanza facile definire un compito livello di progetto: Aggiungi :eval-in-leiningen true al defproject definizione e spostare la definizione compito di src/leiningen/foo.clj.

+0

Non ci sono dadi. Ho trovato anche questo suggerimento, e in questo caso non sembra fare nulla. Ho aggiornato la mia domanda con un completo 'project.clj' per completare l'esempio. Grazie per lo sforzo. – charleslparker

+0

Non mi sono reso conto che avevi la tua definizione "foo" all'interno del tuo file project.clj. Aggiornato la mia risposta con la risposta corretta (si spera) – DanLebrero

+0

Questo l'ha fatto! È un po 'più un dolore, ma non ancora male. Grazie! – charleslparker

4

È possibile farlo utilizzando .lein-classpath in modo che punti a una directory esterna a src contenente le attività. Per esempio, se avete il plugin in src/leiningen/foo.clj, si può fare, alla radice del progetto:

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

Il motivo che potrebbe voler evitare :eval-in-leiningen true è che ha alcuni comportamenti divertenti quando si sta cercando di fare AOT compilazione per una classe main. In particolare, si ottiene:

Compilation failed: java.io.IOException: No such file or directory, compiling:(testproj/core.clj:1) 

Quando si cerca di compilare/eseguire un anche un semplice esempio di prova. Maggiori informazioni su:

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

+6

Come si specificano le librerie/i deps richiesti dall'attività? – oshyshko

Problemi correlati