Notice: This blog is no longer maintained. All new content is being published as guides/books/screencasts. Have a look around!

Marco Behler's 2014 Ultimate Java Developer Library, Tool & People List

December 27, 2014 - Marco Behler

Java developers are flooded with a plethora of libraries and tools for their day-to-day work. We compiled a little list of stuff that we use everyday in primarily business line development (CRM, banking, web dev etc.) and that we can wholeheartedly recommend. There’s also a very opinionated section of people that we’d like to give some props to, if you are not on it, give us a shout ;)

Please feel free to comment or post your own personal suggestions. Our personal New Year’s wish, though: Please link to this page when referencing this list and do not reproduce it in its entirety. Props go out to Scott Hanselman for „inspiring“ this list.

Happy new year!

Backend

HikariCP A topic that you probably never think about, but HikariCP is now the connection pool on the JVM. Stop fighting with DBCP and other options and trust the website when it says: nothing is faster, nothing is more correct ;)

Jooq A fresh outlook on Java persistence, especially if you are fed up with heavier ORM choices and are not afraid, but in love with SQL.

Hibernate Chances are that you will encounter Hibernate sooner or later in a project and even though development has somewhat stalled, and there’s a lot of criticism of ORM in general, it is still a good library if used correctly.

Dropwizard Want to get your REST services up and running in no time, with a nice little stack of Java libraries behind? Give Dropwizard a try.

Spring-Boot Similarily, if you find yourself having to create new Spring projects over and over, try Spring-Boot, as it will considerably cut down your ramp-up time.

Spring-Batch Batch jobs are not the sexiest programmes in the world, but if you have to write them, Spring-Batch is a viable option.

Spring Yep, there’s a lot of cruft, especially in the „lesser-known“ spring projects, but if you want to get a quick bang for your buck and simply be able to re-use a lot of stuff then you won’t get around Spring.

Logback We love Ceki and all the work he has put into Logback and logging over the years. Logback is stable and mature and a good choice for logging.

Log4j2 And now there’s also log4j2, which is also a reasonable choice for logging stuff. Please do not get sucked into a religious war and insanely non-actionable log framework-comparisons.

Resteasy Another good choice for building RESTful Java applications.

Dagger Alright, alright, now Spring’s dependency injection is just too slow/cumbersome for you and you want dependency injection on steroids? Use Square’s Dagger!

Dagger 2 And if Dagger is simply burning too much CPU cycles for you and you’re still left unsatisfied with the startup time, use Google’s fork Dagger 2 ;)



Frontend / CMS

AEM / CQ5 Especially in Germany there’s a ton of CQ5 jobs at the moment, as a fair amount of big companies using it as a CMS to build websites. We’re not the biggest fans, but have to acknowledge its market share.

Magnolia CMS Magnolia on the other hand, especially with its Spring integration Blossom is a really nice JCR-based CMS. Give it a try.

Wicket Wicket is one of the few Apache projects, which rock. Yes you might be scared of the session usage and components, but if you get behind your fears it is a rock solid choice.

Matt Raible’s list for the rest If you feel pissed off because we did not mention web framework xyz, check out Matt Raible’s comparison of the remaining 9999999 Java web frameworks.



Database

Jadira Usertypes Want to persist Joda Time/Money to a database using Hibernate? Use Jadira.

JDBCslog Most JDBC drivers do in fact support logging, but if you want to have a portable choice, use JDBCSlog or any of its forks. Beware, it is somewhat buggy, but most of the time it does the job.

Liquibase Database migrations. What else can we say. We have it in production in a banking environment and it does everything it is supposed to do.

Flyway If you are scared of a tiny bit of xml however and just want to do SQL-only database migrations, you might wanna give Flyway a try.



Utilities, Utilities, Utilities

Guava In general, forget Apache Commons. Use Guava for collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth.

Args4j Yet another command line argument parsing library, this time from Kohsuke.

Joda Money A very good start if you have to do anything money related on the JVM and before Java 9 comes out.

Archaius Do you still have to reload your application because you changed a .properties file? Check out Netflix’s Archaius, which is a hell of a configuration management library.

Joda Time Cannot use Java 8 and its new date api? Then use Joda time.

JamonThe Java Application Monitor (JAMon) is a free, simple, high performance, thread safe, Java API that allows developers to easily monitor production applications.

Freemarker We didn’t want to mention Freemarker here, as we have seen way too many Freemarker stack traces over the years, but no matter how you put it, Freemarker is still an often used templating language.

JCommander Although somewhat dead and somewhat buggy, JCommander still does an ok job when you want to parse command line arguments.

Jetty We’re huge fans of jetty, especially as an embedded http server. And with version 9.1 - see the link - it even got shockingly fast ;)

JPos / JCard For payment/credit-card dev check out the ISO–8583 implementation.

org.reflections A reflections library++.

Jsch If you want to do anything SSH related on the JVM, chances are you will stumble upon Jsch (or net.schmizz)

Zt-ZIP There’s a ton of ways to zip/unzip stuff in Java, but Zeroturnaround’s is one of the nicer ways that we’ve found.



Resilience

Hystrix A huge recommendation from us: Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

Chaos Monkey Another huge recommendation. Let chaos monkey run against your production servers like Netflix does and see how well you can recover :)



Bean Mapping

ModelMapper The new kid on the block: Simple, Intelligent, Object Mapping.

Dozer Another way to map your Java beans.

BeanUtils The oldest way known to man to map and copy your Java beans ;)



Testing

Java Micro Benchmark If you want to publish any sort of meaningful Java (Micro)Benchmark, use JMH!

TestNG Although we disagree with Cedric on a couple of points, his TestNG library is, apart from JUnit, one of the de-facto unit test tools in Java land.

Awaitility Need to do asynchronous testing and have already written a bunch of boiler plate testing code? Forget it and use this: await().atMost(5, SECONDS).until(costumerStatusIsUpdated());

AssertJ Yep, there’s a ton of other assertion libraries on the JVM, but AssertJ is one of the nicer ones.

Cucumber-JVM We are also somewhat in love with the JVM port of cucumber, making „BDD fun“

Mockito Need to mock/stub objects? No way around mockito

Rest-Assured A good library for testing and validating your REST services.

Wiser / Subethamail If you need a lightweight smtp-server for your test-code, use Wiser.



Marshalling/Unmarshalling/Parsing

Jaxb Not a library, but a specification and an, in our opinion, complex and cumbersome one. Still, you sooner or later will be in a project which is Jaxb’d.

XStream A simple library to serialize objects to XML and back again.

Jackson One of the best JSON marshallers/unmarshallers out there, can also do XML, a bunch of other data formats and has a ton of extension modules.

Hikari-JSON Still waiting for it, but Brett announced that it is gonna kick every other JSON librarie’s butt ;)

JSoup JSoup is fantastic for parsing HTML in Java with the best of DOM, CSS, and jQuery.



Messaging / Distributed / Routing

Hazelcast Need distributed, in-memory data for a tiny cache or similar? Use Hazelcast.

ActiveMQ There’s also a gazillion of possibilities to do messaging on the JVM, but you cannot go really wrong with ActiveMQ (or Apollo)

Camel Even though we think it is overkill in a lot of situations, camel can actually make routing messages, events or other..things ;) quite nice



People of the year

Note: Take this list light-heartedly, yep there was only space for 5 and this year it is quite database heavy :)

Lukas Eder Lukas is our own personal hero this year, check out his blog and subscribe to his newsletter and give his JooQ library a try.

Brett Wooldrige Brett is doing insanely good work with HikariCP, but even more you should check out his FAQ pages, where you’ll get a ton of knowledge on how connection pooling etc works.

Markus Winand If you haven’t already, buy his book „SQL Performance Explained“.

JetBrains We love everything Jetbrains does and have most of their tools. Stop using Eclipse, Jenkins and all the Atlasssian stuff already! ;)

Larry Ellison Is your question: Are we a loser? NO! KNOW WHAT THEY USE? THEY USE ORACLE!



Build

Maven Love it or hate it, but as a build tool Maven is gonna stay.

Gradle But if you are fed up with Maven, give Gradle a try. IDE integrations have gotten better this year and even though the number one complaint we hear is „people are going to shoot themselves even more in the foot than with maven“, we think you should stop complaining and RTFM ;)

The Pants If you want to go for a completely new kid on the block, check out Pants



Languages

Kotlin You read the point above with our unconditional Jetbrains love? In all seriousness, Kotlin , as long as you are IntelliJ IDEA based, is a great JVM language.

Scala If it wasn’t for the compiler speed…;)

Java 8 Nothing really we can say, but anyway Java 8 is not going to help if your client is stuck on 1.4 for whatever bogus reasons, huh? ;)



Http Stuff

OkHttp A good new http client

Apache Http Client The default choice for http



Repositories

Artifactory Nice functionality, looks horrible. Get a designer jfrog!

Nexus Looks nice and does what it is supposed to do.



Databases

Oracle Disregarding how much it costs, Oracle is a rock solid database. This year we played a lot with selecting data straight from Oracle as XML and pushing it directly into the HttpServletOutputstream (crazy stuff), push updates and more. You gotta love the features noone knows about.

H2 The best embedded database we know. Thomas Mueller, you rock!

Postgres Postgres is getting better with every release and they are also doing fantastic work!



NoSql!

Just NO! ;)

JVM

JRebel Zeroturnaround is so active in marketing, chances are you will have heard of JRebel by now. Yep, no more (or fewer) restarts of your Java application, less waiting times.

Chronon Chronon is such a nice idea, it is basically a DVR for your Java programmes. A pity it still has a ton of problems with generated byte code and is somewhat unusable for us in non-trivial projects.

Plumbr If you are experience memory leaks etc. give Plumbr a try. Not only is the tool good, but they actually have excellent customer support and will help you analysing stuff.



IDEs

IntelliJ IDEA The.Best.IDE.In.The.World.Period.

Eclipse If you are too poor to afford IDEA, keep using Eclipse ;)



And that’s it for this year! Enjoy and let us know your recommendations!