簡體   English   中英

我如何依賴每個clojure contrib庫?

[英]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找到,其中也可以找到使用說明。

我感覺到你的痛苦。 它應該是有用的http://dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Go

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM