gpt4 book ai didi

clojure - 我如何依赖每个 clojure contrib 库?

转载 作者:行者123 更新时间:2023-12-04 05:32:03 24 4
gpt4 key购买 nike

我曾经喜欢包含所有的 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 中运行它,则可以使用 pomegranate(这似乎是唯一合适的用例,对吗?)。您可以让它使用 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 session 中手动调用。代码可以在 https://github.com/rplevy/contrib-repl 找到,其中还可以找到使用说明。

关于clojure - 我如何依赖每个 clojure contrib 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com