“Build” is an umbrella term that has come to encompass more and more of the things we do after we’ve written the code but before the code has been delivered (another loaded term, given the complications of software as a service, cloud computing, and so on).
For our purposes here, we’ll consider build to mean:
Dependency management, which allows you to systematically use external libraries
Packaging the results of compilation and other project assets into artifacts
Distribution of those artifacts within a dependency management context
That overly formal description sounds more complicated than the activities it describes. You’re likely doing these things already:
Table 8-1. Contrasting “build” solutions for different programming languages
Because Clojure is a JVM language, it naturally reuses large swaths of that ecosystem’s build, packaging, and distribution infrastructure and mechanics:
Leiningen reuses much of the Maven infrastructure while providing a far more pleasant “UI” and Clojure-native development experience.
There are plug-ins for Maven, Gradle, and Ant that aid in driving Clojure builds from those tools.
Clojure libraries are packaged as .jar files, Clojure web applications are (usually) ...