2012-09-02 50 views
11

在Leiningen版本1.XX我可以只在一個單一的項目通過將按照定義lein foo任務有效的該項目的project.clj項目級Leiningen插件

(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)) 

你可以得到多一點關於這個信息在這裏:

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

在2.xx的,我不能這樣做了(即我得到'foo' is not a task.看來途徑,方式矯枉過正,我將不得不開始一個單獨的項目爲此任務。 是否仍然可以在leiningen 2.x.x的project.clj中定義一個任務?

回答

5

簡短的回答是「不」,但它仍然是相當容易的定義項目級任務:添加:eval-in-leiningen truedefproject定義和任務定義移動到src/leiningen/foo.clj

+0

對不起,沒有骰子。我也發現了這個提示,在這種情況下它似乎沒有做任何事情。我已經用完整的'project.clj'來更新我的問題來完成這個例子。感謝您的努力。 – charleslparker

+0

我沒有意識到你在你的project.clj文件中有你的「foo」定義。用正確的答案更新我的答案(希望) – DanLebrero

+0

這樣做!這多一點痛苦,但還不算太壞。謝謝! – charleslparker

4

您可以通過使用.lein-classpath指向包含任務的src之外的目錄來執行此操作。例如,如果你有插件在src/leiningen/foo.clj,你可以做,在項目根:

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

你可能想避免:eval-in-leiningen true的原因是,它有,當你試圖做AOT一些有趣的行爲彙編爲main類。具體來說,你得到:

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

當試圖編譯/運行一個簡單的測試例子。更多的信息在:

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

+6

您如何指定任務所需的庫/庫? – oshyshko