2012-09-02 6 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. प्राप्त यह रास्ता लगता है, जिस तरह से overkill मुझे एक अलग परियोजना शुरू करने के लिए के लिए इस काम के लिए। क्या अभी भी leiningen 2.x.x के लिए project.clj के भीतर कोई कार्य परिभाषित करना संभव है?

उत्तर

5

संक्षिप्त उत्तर "नहीं" है, लेकिन यह अभी भी एक परियोजना स्तर कार्य परिभाषित करने के लिए काफी आसान है: अपने defproject परिभाषा को :eval-in-leiningen true जोड़ें और src/leiningen/foo.clj करने के लिए कार्य परिभाषा चलते हैं।

+0

क्षमा करें, कोई पासा नहीं। मैंने पाया कि टिप भी, और ऐसा लगता है कि इस मामले में कुछ भी नहीं है। मैंने उदाहरण पूरा करने के लिए एक पूर्ण 'project.clj' के साथ अपना प्रश्न अपडेट कर लिया है। आपके परिश्रम के लिए धन्यवाद। – charleslparker

+0

मुझे एहसास नहीं हुआ कि आपके प्रोजेक्ट.क्लज फ़ाइल के अंदर आपकी "foo" परिभाषा थी। सही प्रतिक्रिया के साथ मेरा उत्तर अपडेट किया (उम्मीद है) – DanLebrero

+0

ऐसा किया! यह दर्द का थोड़ा और है, लेकिन अभी भी बहुत बुरा नहीं है। धन्यवाद! – charleslparker

4

आप का उपयोग कर 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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^