Dependency management is a hard problem, and Java doesn’t make our lives any easier. Popular build tools like Maven and Gradle do what they can, but their default behavior doesn’t always alert us to potential problems. While both tools can fail when there are dependency conflicts, they’re not enabled by default. Below we will walk through the evolution of a set of modules; how they can go from having no version conflicts, to having runtime failures that should be build time failures. We’ll examine why this happens, and what tools Maven and Gradle have to help guard against it.
Consider this simple dependency graph, with three modules, A?1.0.0, B?1.0.0, and C?1.0.0. Each module is semantically versioned. Each of these modules contains one class in its public API.
View original post 2 mots de plus