Ответ 1
Короткий ответ - "нет", но довольно сложно определить задачу уровня проекта: добавьте :eval-in-leiningen true
в определение defproject
и переместите определение задачи на src/leiningen/foo.clj
.
В версиях Leiningen 1.x.x мне удалось определить задачу lein foo
, действительную только в одном проекте, поставив в этом проекте project.clj
следующее:
(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.
Кажется, путь, способ переусердствовать, чтобы мне пришлось запускать отдельный проект для этой задачи. можно определить задачу в project.clj для leiningen 2.xx?
Короткий ответ - "нет", но довольно сложно определить задачу уровня проекта: добавьте :eval-in-leiningen true
в определение defproject
и переместите определение задачи на src/leiningen/foo.clj
.
Вы можете сделать это, используя .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)
При попытке скомпилировать/запустить даже простой пример тестирования. Дополнительная информация: