Over the course of the last several months of teaching the Maven 101 and 201 courses with Sonatype, it has been exciting to hear some of the "aha" moments that students have had. I'd like to discuss some of the most frequently occurring ones in a series of blog posts, starting with the most common epiphany:
- Dependency management doesn't select the highest version
A misconception that I've often heard is that "Maven chooses the highest version" when two or more transitive dependencies disagree on the version of a given groupId and ArtifactId coordinate.
It may surprise you to learn that Maven's dependency resolution process is a rather simple one. This simplicity is actually a benefit for the sake of debugging and manually resolving the dependencies.
The fact is that Maven resolves the version nearest to the top of the dependency tree. But how can you visualize this hierarchy? There are two approaches.
The first approach is via the command line and the dependency plugin. At the prompt in a Maven project, type: