Clojure 项目级Leiningen插件
在Leiningen版本1.x.x中,我能够定义一个仅在单个项目中有效的Clojure 项目级Leiningen插件,clojure,leiningen,Clojure,Leiningen,在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 "htt
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))
您可以在此处获得更多关于此的信息:
在2.x.x中,我不能再这样做了(也就是说,我知道“foo”不是一项任务。对于我来说,为这项任务启动一个单独的项目似乎太过了。是否仍然可以在project.clj中为leiningen 2.x.x定义一个任务?简短的回答是“否”,但定义项目级任务仍然相当容易:将
: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
您可能希望避免在leiningen true中使用:eval的原因是,当您尝试为main
类执行AOT编译时,它有一些有趣的行为。具体来说,您会得到:
Compilation failed: java.io.IOException: No such file or directory, compiling:(testproj/core.clj:1)
尝试编译/运行测试时,即使是一个简单的测试示例。更多信息,请访问:
对不起,没有骰子。我也找到了这个提示,在这种情况下它似乎没有任何作用。我已经用一个完整的项目更新了我的问题。clj
来完成这个例子。谢谢你的努力。我没有意识到你的project.clj文件中有你的“foo”定义。用正确的回答更新了我的答案(希望如此)成功了!虽然有点痛苦,但还不算太糟糕。谢谢!P.s.-我还编辑了一些答案,如果我正在阅读的话,我会发现答案更清楚。希望你不介意,再次感谢!你如何指定任务所需的库/Dep?