On Monday, 12 February 2018 at 10:35:06 UTC, Russel Winder wrote:
In all the discussion of Dub to date, it hasn't been pointed out that JVM building merged dependency management and build a long time ago. Historically:

  Make → Ant → Maven → Gradle

and Gradle can handle C++ as well as JVM language builds.

So the integration of package management and build as seen in Go, Cargo, and Dub is not a group of outliers. Could it be then that it is the right thing to do. {snip}

As an additional data point, the main project management tool for Clojure is [Leiningen](https://leiningen.org/). I don't understand the details under the hood, but it makes use of Maven infrastructure and can install packages from the Clojure online package repo, as well as from [Maven Central](http://search.maven.org/) (the online repo of JVM jars).

Lein installs packages into the same place maven does, into a "local repo" in an ~/.m2/repository directory. This makes it very easy to `rm -fr` it to start afresh if needed. Lein keeps multiple versions of packages when your various projects use different versions of the same library.

The lein project config file is itself written in Clojure. See a [sample lein config file](https://github.com/technomancy/leiningen/blob/master/sample.project.clj) if interested.

When I first encountered lein I was confused. Was it for project creation, dependency management, building and running your app, or running tests? Turns out it does all of those, and also supports plug-ins to allow it to do all kinds of other project-related tasks that aren't built-into the tool (for example, generating docs --- see the [full list of lein plug-ins](https://github.com/technomancy/leiningen/wiki/Plugins)).

Reply via email to