11

Leiningen バージョン 1.xx ではlein foo、そのプロジェクトの .xml に以下を入れることで、単一のプロジェクトでのみ有効なタスクを定義できました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 内でタスクを定義することはまだ可能ですか) 。ライニンゲン 2.xx の場合は?

4

2 に答える 2

5

簡単に言えば「いいえ」ですが、プロジェクト レベルのタスクを定義するのはかなり簡単です。定義に追加:eval-in-leiningen truedefproject、タスク定義を に移動しますsrc/leiningen/foo.clj

于 2012-09-03T23:49:00.447 に答える
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

于 2012-09-07T02:28:11.077 に答える