depify reads your Leiningen project.clj configuration file and produces a deps.edn
file suitable for the Clojure CLI tools.
deps.edn and the Clojure CLI tools have a narrower focus than Leiningen or
Boot, but depify will do its best to produce a useful deps.edn replacement.
This includes adding extra aliases to provide “missing” functionality. One such
example is the addition of the :test and :runner aliases borrowed from Sean
Corfield’s dot-clojure repo. Other aliases may be added in the future - PRs are
always welcome!
- 2018-06-13
- Add ability to read
lein pprintoutput from stdin (actually fixes #2)
- Add ability to read
- 2018-06-12
- Add ability to read
project.cljfrom stdin (fixes #2)
- Add ability to read
- 2018-06-11
- Hefty refactoring (fixes #1 and many other issues)
Create an alias in your ~/.clojure/deps.edn map:
:depify {:extra-deps {org.clojure/clojure {:mvn/version "1.9.0"}
depify {:git/url "https://github.com/hagmonk/depify"
:sha "04329744872890711dbba8939a16e9987dd33bb3"}}
:main-opts ["-m" "depify.project"]}
:zprint {:extra-deps {org.clojure/clojure {:mvn/version "1.9.0"}
zprint {:mvn/version "0.4.9"}}
:main-opts ["-m" "zprint.main"]}Then, invoke depify in any folder that contains a project.clj:
clj -A:depifydepify will read any pre-existing deps.edn file in your project folder and use
that as an initial starting point. The result of merging project.clj into
deps.edn will be printed to standard out.
depify can also read project.clj files from stdin. This can be handy if, for
instance, you want to import a pile of dependencies into your current deps.edn
from a remote project.clj:
curl -L -o - "https://raw.githubusercontent.com/metasoarous/oz/master/project.clj" | clj -A:depifydepify can also interpret the output from lein pprint. This has the advantage
of evaluating content inside project.clj - for instance, quoted variables are
expanded, paths are resolved, etc.
lein pprint | clj -A:depifylein pprint can be invoked with a list of keys in order to extract specific
values from the project.clj data. depify can handle any key that returns a
list of maven coordinates, which will be interpreted as simple dependencies. The
following will result in a dependency set that is the union of both keys:
lein pprint :dependencies :plugins | clj -A:depifyNotice in my ~/.clojure/deps.edn I also have zprint as an alias, enabling this from your project folder:
clj -A:depify | clj -A:zprint > deps.edn.tmp ; mv deps.edn.tmp deps.ednYou may see a “Stream closed” exception emitted by zprint, which can be safely ignored.
Based on the initial concept in this gist by Sean Walker. depify improves on it slightly:
deps.edn
{:deps {ding/dong {:mvn/version "1.0"}}}project.clj
(defproject super-dooper "1.0"
:dependencies [[tick/tock "1.0"]])deps.edn
{:deps {ding/dong {:mvn/version "1.0"}, tick/tock {:mvn/version "1.0"}}}project.clj
(def something "0.1.2")
(defproject foobar "1.0"
:dependencies [[something/gizmo ~something]])deps.edn
{:deps {something/gizmo {:mvn/version "0.1.2"}}}project.clj
(defproject super-dooper "1.0"
:jvm-opts ["-XX:+EnormousBiceps"]
:main super-dooper.core
:dependencies [[ding/dong "1.0"]])deps.edn
{:aliases
{:run
{:jvm-opts ["-XX:+EnormousBiceps"],
:main-opts ["-m" "super-dooper.core"]}},
:deps {ding/dong {:mvn/version "1.0"}}}project.clj
(defproject super-dooper "1.0"
:jvm-opts ["-XX:+EnormousBiceps"]
:main super-dooper.core
:dependencies [[ding/dong "1.0"]]
:profiles {:dev {:dependencies [[tick/tock "1.0"]]
:jvm-opts ["-XX:+CrashAndBurn"]}})deps.edn
{:aliases
{:run
{:jvm-opts ["-XX:+EnormousBiceps"],
:main-opts ["-m" "super-dooper.core"]},
:dev
{:jvm-opts ["-XX:+CrashAndBurn"],
:extra-deps {tick/tock {:mvn/version "1.0"}}}},
:deps {ding/dong {:mvn/version "1.0"}}}project.clj
(defproject super-dooper "1.0"
:dependencies [[ding/dong "1.0"]]
:test-paths ["testomatic"])deps.edn
{:aliases
{:test
{:extra-paths ["test" "testomatic"],
:extra-deps {org.clojure/test.check {:mvn/version "RELEASE"}}},
:runner
{:extra-deps
{com.cognitect/test-runner
{:git/url "https://github.com/cognitect-labs/test-runner",
:sha "76568540e7f40268ad2b646110f237a60295fa3c"}},
:main-opts ["-m" "cognitect.test-runner" "-d" "test"]}},
:deps {ding/dong {:mvn/version "1.0"}}}project.clj
(defproject super-dooper "1.0"
:dependencies [[ding/dong "1.0"]]
:resource-paths ["more-resources"]
:source-paths ["more-sources"])deps.edn
{:deps {ding/dong {:mvn/version "1.0"}},
:paths ["src" "more-sources" "more-resources"]}project.clj
(defproject super-dooper "1.0"
:dependencies [[ding/dong "1.0"]]
:repositories [["java.net" "https://download.java.net/maven/2"]
["releases"
{:url "https://blueant.com/archiva/internal"
:username "milgrim",
:password :env}]])
deps.edn
{:deps {ding/dong {:mvn/version "1.0"}},
:mvn/repos
{"java.net" {:url "https://download.java.net/maven/2"},
"releases" {:url "https://blueant.com/archiva/internal"}}}
Tests can be invoked with:
clj -A:test