At work, we have a few Clojure services in production. Each service is its own leiningen project with its own dependencies. And because setting up a local maven repository is hard, each project reimplements quite a bit of logic. This duplicate code usually relates to the non-essential but still important parts of a service: logging, metrics, sentry integration, etc.
Just the other day, I was getting really annoyed with this situation, and was
about ready to go learn about the wonderful intricacies of Maven, when I
lein install, you can install your library as a jar and a pom to the
local repository. Here, local repository means a local repository, typically
~/.m2. Your apps can then depend on this library via the normal
:dependencies list in the project file. This is all completely seamless
and works well.
Apparently, this command has been around for a long time.
Armed with this new information, I was able to create an internal project
called metrics and remove a ton of duplication.
lein install also allows
multiple versions of the same library to be installed at once. Simply require
whatever version you need in your apps’
This makes developing Clojure projects without having to publish your libraries to Clojars a lot easier.