2012-09-02 12 views
11

In Leiningen Versionen 1.xx konnte ich eine lein foo Aufgabe gilt nur in einem einzigen Projekt definieren, indem Sie das folgende in das Projekt setzen project.clj:Projektebene 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)) 

Sie können ein wenig mehr bekommen Informationen dazu hier:

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

In 2.xx, ich bin nicht mehr in der Lage zu tun (dh ich 'foo' is not a task. bekommen Es scheint Art und Weise, Art und Weise übertrieben für mich ein separates Projekt beginnen zu müssen für diese Aufgabe. Ist es noch möglich eine Aufgabe innerhalb von project.clj für leiningen 2.x.x zu definieren?

Antwort

5

Die kurze Antwort lautet „nein“, aber es ist immer noch recht einfach, eine Projektebene Aufgabe zu definieren: In :eval-in-leiningen true auf Ihre defproject Definition und die Aufgabendefinition zu src/leiningen/foo.clj bewegen.

+0

Sorry, keine Würfel. Ich habe diesen Tipp auch gefunden und scheint in diesem Fall nichts zu tun. Ich habe meine Frage mit einem vollständigen 'project.clj' aktualisiert, um das Beispiel zu vervollständigen. Danke für die Bemühung. – charleslparker

+0

Ich habe nicht erkannt, dass du deine "foo" -Definition in deiner project.clj-Datei hast. Aktualisiert meine Antwort mit der richtigen Antwort (hoffentlich) – DanLebrero

+0

Das hat es geschafft! Es ist ein bisschen mehr Schmerz, aber immer noch nicht so schlimm. Vielen Dank! – charleslparker

4

Sie können dies tun, indem Sie .lein-classpath verwenden, um auf ein Verzeichnis außerhalb von src zu zeigen, das die Aufgaben enthält. Zum Beispiel, wenn Sie das Plug-in src/leiningen/foo.clj haben, können Sie tun, um das Projekt root:

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

Der Grund, warum Sie wollen vielleicht :eval-in-leiningen true zu vermeiden ist, dass es einige lustige Verhaltensweisen hat, wenn Sie versuchen, AOT zu tun Zusammenstellung für eine main Klasse. Insbesondere erhalten Sie:

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

Beim Versuch, eine auch einen einfachen Test Beispiel zu kompilieren/ausführen. Weitere Informationen unter:

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

+6

Wie spezifizieren Sie Bibliotheken/Deps, die für Ihre Aufgabe benötigt werden? – oshyshko

Verwandte Themen