Java supports Runnable JARs. This bundles all dependencies into the JAR so you can just run:

  java -jar foobar.jar\n
\nAnd if it's a webapp, you can use something like Jersey so that the JAR itself if a webserver (launched from main function). And with Jersey+Grizzly you can make webapps that have zero XML config, btw.

Java's SSL handling is definitely annoying, though. But I think it's better than how other languages do it which is to simply bypass cert validation.

Also, I don't think it's fair to lump anything Android-related into complaints about Java. Google yoinked the Java syntax and the name and then added their own stack underneath.

My main pain point with Java is dependency management and builds. I don't like any of the systems out there. After years of Ant, Ivy, and Maven, I've just resigned myself to using Eclipse and downloading JARs manually, storing them with the code. It's ugly but not as ugly as Maven.

For those who can accept ant+ivy, I feel this is a stab in the right direction for console apps: https://github.com/djeikyb/simple-console-app

The script target creates a runnable shell script that has the jar and all dependencies embedded. The last step might be using packr[0] to also embed the java runtime.

[0]: https://github.com/libgdx/packr