Since the number of dependencies is way less then in the JS world, its possible to pin them down manually.
If you absolutely need to have multiple versions of the same dependency, you probably need to use OSGi.
If you absolutely need to have multiple versions of the same dependency, you probably need to use OSGi.
On the JS side there's a way deal with that if people use modules. Good dependencies don't clobber the global namespace. Multiple versions can exist side by side. It'll just make your build bigger.