Just because a tool is the most popular doesn’t mean it’s the “best.” What’s best is always context-dependent in programming. However, popularity is an undeniably important metric when choosing between a handful of similar tools. It’s not the popularity itself that adds to a tool’s value; it’s the greater supply of resources and support from the larger community of a given tool.

Popular tools are easier to learn because so many people can help you use them. And popular open-source tools tend to be less buggy because more eyes are on the code and more people are testing it in a greater number of scenarios.

So, while there’s always a counterpoint like Apache and Nginx—two web servers: Apache is used on many more websites, but Nginx is used more by the top sites on the web, which means its used by some of the best engineering teams—in a lot of cases, popularity can be a key differentiator between tools.

This list covers most of the important things you need tools for when developing Java applications. It covers each category by providing the “Top” most popular tool, and also provides a “Runner-up,” with some context and citations from large Java community surveys proving these placements. Java beginners should have a look at all of these top tools to get more familiar with the ecosystem.

Language version

Top: Java 8

Runner-up: Java 7

Java 8 has possibly the fastest adoption rate of any new version to date. This is likely due to long-awaited modern language features such as lambda expressions that cut down on some of the verbosity that Java is often criticized for. The performance increases are a big deal too.

While new Java apps and primary apps are written in Java 8 now, a good amount of existing Java apps are still Java 7 or 6.

I won’t wade into the Java EE vs. Spring competition, because the stats on that are always in dispute, but they appear to be fairly close in user numbers. About a third of developers using either one also use the other simultaneously.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.9, 1.10)

[2] DZone Guide to the Java Ecosystem, 2015 edition (graphs 1 & 2)

Editor or IDE

Top: (in dispute) Eclipse and IntelliJ IDEA

Runner-up: Netbeans

Eclipse and Netbeans are both free and open source. Eclipse is well known for its large community and wealth of plugins (they're easy to write), which make the platform endlessly extensible but slow to load and cumbersome at times. Netbeans differentiates itself by coming with things such as Maven and Git integration out of box. IntelliJ has the performance and polish of a commercial product. It has both free and paid versions.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (IntelliJ IDEA was the top IDE in this report, figure 1.11)

[2] DZone Guide to the Java Ecosystem, 2015 edition (Eclipse was the top IDE in this one, paragraph 4)

Web framework

Top: AngularJS, Spring MVC

Runner-up: Java Server Faces (JSF)

While two out of three surveys give Spring MVC the edge over Java Server Faces (JSF), the large poll from DZone (paragraph 5) showed a virtual tie between Spring MVC and JSF. That might not matter much anymore, since JavaScript frameworks are making significant inroads into many popular web stacks. The one survey that asked about AngularJS usage compared to pure Java web framework usage showed AngularJS having an edge over the most popular Java frameworks on the front end.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.16)

[2] DZone Guide to the Java Ecosystem, 2015 edition (chart 3, paragraph 5 shows a tie)

[3] JSF and Spring MVC Tie in Java / JVM Frameworks Poll

Application server

Top: Tomcat

Runner-up: Wildfly

Tomcat has been the most used Java application server for many years. It’s lightweight and doesn’t try to implement all of the Java EE specs. In some surveys, Jetty, another lightweight app server, is ahead of Wildfly—the top Java EE-supporting app server. Tomcat is the clear leader for simple Java applications, and lightweight app servers are definitely the weapon of choice in microservices architectures.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.13)

[2] DZone Guide to the Java Ecosystem, 2015 edition (chart 4)

[3] RebelLabs’ Great Application Server Debate 2013 (for a deeper dive into app server use cases)

Testing frameworks

Unit Testing

Top: JUnit

The de facto Java unit testing framework.

Mocking

Top: Mockito

The clear favorite among Java mocking frameworks.

Automated browser web testing

Top: Selenium

Selenium just automates the browsers. Developers usually use this tool along with testing frameworks to do large-scale web application testing.

Behavior-driven development (BDD) testing

Top: Cucumber-JVM, Spock

Cucumber was originally a Ruby project but now has implementations for every major programming language. Spock supports the JVM language Groovy as well as Java. It could also handle much of what Mockito does.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2014

[2] DZone Guide to Continuous Delivery, 2015 edition (page 20)

Version control system

Top: Git

Runner-up: Subversion

Remember, Git is more flexible than just using GitHub and its conventions for version control. Git seems to have pretty much won the version control wars, with most of the Subversion and CVS users being developers caught in a suite of legacy tools.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.18)

Continuous Integration

Top: Jenkins

Runner-up: No CI server

This is another area where there’s a clear leader. Jenkins’ flexible plugin system led to its gradual rise to dominance over the last five years. There are more people not using any CI server than there are using any single competitor of Jenkins. The next closest competitor is Bamboo.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.13)

[2] DZone Guide to Continuous Delivery, 2015 edition (page 20)

[3] DZone Guide to the Java Ecosystem, 2015 edition (paragraph 4)

Database

Top: Oracle DB

Runner-up: MySQL

Your database choice is a lot more context-dependent than many of the other tools here. Depending on the app you’re building, you might need a light key-value store as well as a massive columnar database. For most applications, relational databases still get the job done, and that’s why you see two relational databases at the top of the Java tooling world.

Oracle is one of the few commercial products in this article, which means it has a lot of “enterprise” features. MySQL or even SQLite are strong choices if you’re looking for open source.

Data:

[1] DB-Engines Database Rankings

[2] DZone Guide to Databases 2016

[3] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.14, this is the only Java-specific one)

Persistence API and/or Object relational mapping (ORM)

Top: The Java Persistence API (JPA) / Hibernate

Runner-up: The Java Database Connectivity API (JDBC)

Hibernate was so popular that it got standardized in the Java Persistence API specification several years back.

Data:

[1] DZone Guide to the Java Ecosystem, 2015 edition (paragraph 4)

[2] RebelLabs Java Tools and Technologies Landscape Report 2014 (page 31)

Static code analysis

Top: FindBugs

Runner-up: SonarQube

These two tools are very different in scope, so it's hard to compare. FindBugs is a simpler static code analysis tool while SonarQube is an entire platform for code quality analysis, syntax checking, and code metrics.

Data:

[1] DZone Guide to Continuous Delivery, 2015 edition (page 20)

[2] RebelLabs Java Tools and Technologies Landscape Report 2014 (page 2)

Syntax checking

Top: Checkstyle

Runner-up: Eclipse

This functionality can be found in the major Java IDEs, but if you need a separate program specializing in syntax checking (aka. "linting"), Checkstyle is a good choice.

Data:

[1] DZone Guide to Continuous Delivery, 2015 edition (page 20)

Artifact management

Top: Sonatype Nexus

Runner-up: JFrog Artifactory

Many developers don’t use a artifact repository for versioning JARs, WARs, libraries, and complete apps. But when they do, Nexus has an edge in users. Both are commercial products. Apache Archiva is an open-source option.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2014 (page 45)

Dependency injection

Top: Spring Framework DI

Runner-up: Google Guice

The Spring framework does a good job at dependency injection, but Google’s developers also created a popular tool in Guice. Dagger isn’t nearly as popular, but it’s new and gaining users, especially around Android development. It’s being used in Pokémon Go.

Data:

[1] Poll of reddit.com/r/java

Performance analysis/profiler

Java profiling

Top: VisualVM

Runner-up: No profiler

A significant number of Java developers are not using any profiler (perhaps leaving performance considerations to a different team). YourKit is another popular alternative to VisualVM.

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.19)

Load testing

Top: JMeter

Runner-up: LoadRunner

There’s a huge variety of load testing tools besides these two, so be sure to research this market. JMeter is open source, and LoadRunner is a commercial product. The main advantage of commercial products is the range of services for running tests in the cloud.

Data:

[1] DZone Guide to Continuous Delivery, 2015 edition (page 20)

Build automation & dependency management

Top: Maven

Runner-up: Gradle

While Maven is the clear leader, Gradle is still used widely as a secondary build tool, and it’s the standard build tool for Android.

Data:

[1] RebelLabs Java Tools and Technologies Landscape Report 2016 (figure 1.12)

[2] DZone Guide to the Java Ecosystem, 2015 edition (chart 4)

Logging libraries

Top: Log4j

The runner-up wasn’t clear with logging libraries, since less research has been done on this tool category. This article gives context around the question of popular logging libraries and setups in Java.

Data:

[1] Takipi’s Top 100 Java Libraries in 2016

[2] The State of Logging in Java in 2013

Any other recent Java tooling research you’d like to add? Or questions you’d like to poll the community about? Share them in the comments.

Keep learning