I think the problem is that Shrinkwrap Resolver takes the first artifact in the tree (navigating each dependency node to the deepest), while Maven takes the artifact closest to the top ("Dependency mediation - this determines what version of a dependency will be used when multiple versions of an artifact are encountered. Currently, Maven 2.0 only supports using the "nearest definition" which means that it will use the version of the closest dependency to your project in the tree of dependencies." from Maven – Introduction to the Dependency Mechanism ).
This seems to match what I see.
I've read the doc from Shrinkwrap and it seems to hint that it's trying to do the same as Maven does as much as possible. Is this dependency resolution behavior done on purpose ? Is it possible to configure Shrinkwrap to do like Maven does?
I see on resolver/DefaultTransitiveExclusionPolicy.java at master · shrinkwrap/resolver · GitHub that it says "Applies the default behavior exhibited by Maven with regards to handling transitive dependencies during resolution.".