If your users are having to install things then the problem is your
deployment mechanism not the JVM dependency hell system. Java
deployments are actually really quite easy. Either you package a total
system with all dependencies and provide entry scripts, or you use Maven
Central (or increasingly BinTray) for accessing dependencies.

If I need deployment mechanisms like the ones above, then there's something wrong with the language. All these crutches and patches. To set up and test a deployment mechanism takes as long as writing the program. No thank you.


This is what you get with shared libraries.  If you don't want to deal with dependencies, either A) ship a static-linked binary or B) cross your fingers and pray.

I've found the java ecosystem to be quite well fleshed out and mature in handling lib/jar dependencies, such that it was an unpleasant shock dealing with C++ after years away.  Using maven, for instance, is a quick and easy way to abstract the problems away (though it is better suited for builds than deployments).


As D gets more support for dynamic libraries, it would be good to take lessons from how Java and others have dealt with dependency management.