![](/img/trans.png)
[英]Eclipse Counterclockwise: How do I add clojure/contrib/sql to my class path.
[英]How do I depend on every clojure contrib library?
我曾经喜欢包含所有的clojure.contrib,并且需要所有的库。 这使得find-doc可用作发现工具。
如今(clojure 1.4)clojure.contrib被分成许多子库。 而这相当破坏了我的方案,这也意味着每次我需要一个新的库时我都不得不重新启动JVM。
所以我正忙着构建一个包含多行的project.clj文件:
[org.clojure/algo.generic "0.0.6"]
....
[org.clojure/data.xml "0.0.4"]
....
因此,我可以让leiningen将每个clojure contrib库放在类路径上,无论我是否需要它们。
而且我认为这将是一个壮观的颈部疼痛,版本号和所有。
我想知道是否有人有更好的方法来做同样的事情?
编辑:考虑一下,如果有一个网页某处有一个库名和当前版本列表,我可以很容易地把它变成一个项目文件。
你可以使用石榴,如果你只想在REPL中运行它(这似乎是唯一合适的用例,对吧?)。 您可以使用Maven Central API查找最新版本。 我认为这比维护某种依赖项目,生成或其他更好。
(require '[cemerick.pomegranate :refer [add-dependencies]])
(add-dependencies
:coordinates '[[clj-http "0.5.8"]]
:repositories {"clojars" "http://clojars.org/repo"})
(require '[clj-http.client :as client])
;; contrib project names from https://github.com/clojure
(def contrib ["tools.nrepl" "tools.trace" "tools.namespace" "tools.macro"
"test.generative" "math.numeric-tower" "core.match" "core.logic"
"data.priority-map" "core.contracts" "tools.cli" "java.jmx"
"java.jdbc" "java.classpath" "data.xml" "data.json" "core.unify"
"core.incubator" "core.cache" "algo.monads" "data.generators"
"core.memoize" "math.combinatorics" "java.data" "tools.logging"
"data.zip" "data.csv" "algo.generic" "data.codec"
"data.finger-tree"])
(defn add-contrib-dependencies
"look up the latest version of every contrib project in maven central,
and add them as dependencies using pomegranate."
[project-names]
(add-dependencies
:coordinates
(map (juxt
(comp symbol (partial format "org.clojure/%s"))
(fn [proj]
(Thread/sleep 100)
(-> "http://search.maven.org/solrsearch/select?q=%s&rows=1&wt=json"
(format proj)
(client/get {:as :json})
:body :response :docs first :latestVersion)))
project-names)))
现在,您只需在项目名称列表中调用此函数:
user=> (add-contrib-dependencies contrib)
{[org.clojure/data.zip "0.1.1"] nil,
[org.clojure/java.classpath "0.2.0"] nil,
[org.clojure/core.cache "0.6.2"] nil, ...}
更新:如前所述,我已将此答案写入库中。 它既可以用作nREPL中间件,也可以从正在运行的REPL会话中手动调用。 该代码可以在https://github.com/rplevy/contrib-repl找到,其中也可以找到使用说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.