2012-09-02 26 views
11

Trong Leiningen phiên bản 1.xx tôi đã có thể để xác định một lein foo nhiệm vụ chỉ có giá trị trong một dự án duy nhất bằng cách đặt sau của dự án mà project.clj:Dự án cấp 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)) 

Bạn có thể nhận được nhiều hơn một chút thông tin về vấn đề này ở đây:

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

Trong 2.xx, tôi không thể làm điều này nữa (ví dụ, tôi nhận được 'foo' is not a task. dường như bằng cách nào, cách quá mức cần thiết đối với tôi phải bắt đầu một dự án riêng biệt cho nhiệm vụ này. Vẫn có thể xác định tác vụ trong project.clj cho leiningen 2.x.x?

Trả lời

5

Câu trả lời ngắn gọn là "không", nhưng vẫn dễ dàng xác định tác vụ cấp dự án: Thêm :eval-in-leiningen true vào định nghĩa defproject và di chuyển định nghĩa nhiệm vụ sang src/leiningen/foo.clj.

+0

Xin lỗi, không có súc sắc. Tôi cũng tìm thấy mẹo đó và dường như nó không có tác dụng gì trong trường hợp này. Tôi đã cập nhật câu hỏi của mình với một 'project.clj' hoàn chỉnh để hoàn thành ví dụ. Cảm ơn cho những nỗ lực. – charleslparker

+0

Tôi không nhận ra rằng bạn đã có định nghĩa "foo" bên trong tệp project.clj của mình. Cập nhật câu trả lời của tôi với câu trả lời đúng (hy vọng) – DanLebrero

+0

Điều đó đã làm được! Đó là một chút đau đớn hơn, nhưng vẫn không quá tệ. Cảm ơn! – charleslparker

4

Bạn có thể thực hiện việc này bằng cách sử dụng .lein-classpath để trỏ đến thư mục bên ngoài src chứa các tác vụ. Ví dụ, nếu bạn có các plugin trong src/leiningen/foo.clj, bạn có thể làm, tại gốc của dự án:

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

Lý do bạn có thể muốn tránh :eval-in-leiningen true là nó có một số hành vi buồn cười khi bạn đang cố gắng làm AOT biên soạn cho lớp học main. Cụ thể, bạn nhận được:

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

Khi cố gắng biên dịch/chạy một ví dụ thử nghiệm đơn giản. Thông tin thêm tại:

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

+6

Làm thế nào để bạn chỉ định thư viện/deps theo yêu cầu của công việc của bạn? – oshyshko

Các vấn đề liên quan