Dub, Cargo, Go, Gradle, Maven

John Gabriele jgabriele at fastmail.fm
Mon Feb 12 17:13:27 UTC 2018


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)).


More information about the Digitalmars-d mailing list