Appendix A. What you need to know about Ivy
Modern software development on the JVM makes heavy use of automated dependency resolution and management. This is where instead of downloading jar files and dumping them into your project, a tool is responsible for determining which jar files are needed by your dependencies and automatically resolves these jars for use in your build.
There are two alternative dependency resolution libraries for Java: Aether and Ivy. Aether is extracted from the build tool known as Maven, whereas Ivy was built from scratch. Both tools are able to interoperate with each other to some extent; albeit, there are some fundamentally different concepts to each. sbt makes use of Ivy for some of its advanced features.
Let’s take a quick look at the core concepts in Ivy and how they show up inside sbt.
The module is the fundamental unit of released project in Ivy. A module is made up of three things: identification information, a set of artifacts, and a set of configurations. The identification information is used to find modules within repositories. The artifacts are the actual files (for example, jars) that were associated with the project. The set of configurations defines the grouping of artifacts. For example, the configuration test would contain all artifacts used for testing.
Let’s start digging into module identification.
The identification information consists of three core attributes: