Why I Hate: Java – Library Management

There are many things I hate (or dislike, or currently have a bone to pick, etc.).  I thought that Java would be a good first target for a post.

Maybe my lack of any formal training is hindering me here, but I find trying to leverage public libraries (take google-guava for example) in Java the worst.  From my experience, you have to actually pull in the code for the library and ship it with your code.  I suspect this is an artifact of the whole JVM concept, but that isn’t a valid excuse, in my opinion.

There are a few issues that arise from this.  The first and foremost issue is that your application bloats like crazy when you want to make use of a single call in a library.  You are also now for patching your software if a dependent library has a security hole.  When developing, you need to actually copy down all dependent libraries in order to have a working copy of the code (or use something like maven or ant).

There is either something I’m missing, or this system is horribly broken (dynamic vs static compiled binaries)?  I thought we were kinda done with statically linked libraries except for extreme exceptions (like embedded systems).