Practically speaking, Maven (the executable tool) and pom.xml (the language) create a hot dependency mess when projects get past the toy stage.  Maven makes most simple things impossible and a few challenges trivial.  &quot;Hamstrung&quot; is the word that comes to mind.  Coupling a declarative, own-the-world, XML programming language with innumerable slap-dash&#x2F;poorly maintained plugins is the pits.<p>All that said, maven repositories and the groupId:artifactId:version:type:classifier organization of modules are really genius.  As you say, this genius shines in IDE&#x27;s where, as just one example, you get nice binary&#x2F;source .jar distributions automatically downloaded to your local repo.  Having an IDE&#x27;s debugger be able to seamlessly and accurately step through 1st party java sources and 3rd party source .jar sources is always so impressive to me.<p>Gradle (and Ivy before it) help paper over the pain and expose the good parts of the maven ecosystem.  I have some gripes with Gradle, but after seeing it in action (and now that IDE&#x27;s can grok its project configs) I&#x27;m so happy to be ditching maven&#x2F;plugins and hand-written pom&#x27;s for the most part.<p>Java needs a holistic dependency management&#x2F;dependency injection&#x2F;artifact repository&#x2F;publishing workflow rethink where well-defined concepts like semver are enforced in the version numbering scheme, making it easier to express &quot;safe&quot; legal version ranges in transitive dependencies.