The technical reason behind the transitive dependency problem is the fact that in very very few cases libraries __enforce__ a version number (the way you do this in Maven it to use square brackets - i.e.```[version]```).

If you only mention a version like `<version>version</version>` that means "preferred" version (not enforced) which opens the "Pandora box" that @rhauch describes above.