Ok, so before you pull any type of weapon on me, hear me out.
Clearly, the java platform has gotten more and more complicated over the years. Indeed, it has added over a short period of time an overwhelming amount of capabilities which make it a very powerful platform.
But all of those capabilities have come at a cost. When I look at the J2SE/J2EE platform today, I have to say that it is somewhat reminiscing of the good old days of the mainframe. My head is spinning from all the technologies and acronyms one has to know to build good J2EE solutions. Here are a few of the things you need to know or be aware of: application servers (pros and cons of the leading app servers), enterprise bean models, JMS, JNDI, JNI, JSP, custom tags, servlets, JavaScript, Spring, Struts, JFC/Swing, Hibernate, JDBC, JDO, Ant, Maven, Cruise Control, JUnit, etc.