Combining tools.deps with Leiningen

Nice! We’re currently doing something like this for Leiningen

;; project.clj
(require '[clojure.edn :as edn])

(def +deps+ (-> "deps.edn" slurp edn/read-string))

(defn deps->vec [deps]
  (vec (map (fn [[dep {:keys [:mvn/version exclusions]}]]
              (cond-> [dep version]
                exclusions (conj :exclusions exclusions)))
            deps)))

(def dependencies
  (deps->vec (:deps +deps+)))

(def dev-dependencies
  (deps->vec (get-in +deps+ [:aliases :dev :extra-deps])))

(def source-paths
  (vec (:paths +deps+)))

(defproject my-project "1.0.0"
  :dependencies ~dependencies
  :source-paths ~source-paths
  :profiles
  {:dev
   {:dependencies ~dev-dependencies}})
2 Likes