One of the traits of a good and experienced Java developer is the extensive knowledge of API, including JDK and third-party libraries. I spent a good deal of time learning API, especially after reading Effective Java 3rd Edition, where Joshua Bloch has advised us to use the existing API for development rather than writing new pieces of code for common stuff. That advice makes sense to me because of the testing exposure these 2nd party libraries get. In this article, I am going to share some of the most useful and essential libraries and APIs, a Java developer should be familiar with. Btw, I am not including frameworks like Spring and Hibernate because they are pretty well known and have specific features.
I am generally including useful libraries for day to day stuff like logging libraries like Log4j, JSON parsing libraries like Jackson, and unit testing API like JUnit and Mockito. If you need to use them in your project then you can either include JARs of these libraries in your project's classpath to start using them or you can use Maven for dependency management.
When you use Maven for dependency management, then it will automatically download these libraries, including the libraries they depend on, known as a transitive dependency.
For example, if you download Spring Framework then it will also download all other JARs on which Spring is dependent like Log4j etc.
You might not realize but having the right version of dependent JARs is a big headache. If you have the wrong versions of the JAR then you will get ClassNotFoundException or NoClassDefFoundError, or UnsupportedClassVersionError.
Btw, If you are a beginner or intermediate Java programmer then I also suggest you join The Complete Java MasterClass course on Udemy to fill the gaps in your knowledge. It's one of the most up-to-date courses in Java and updated for Java 7, 8, 9, 10, and 11 recently.
I am generally including useful libraries for day to day stuff like logging libraries like Log4j, JSON parsing libraries like Jackson, and unit testing API like JUnit and Mockito. If you need to use them in your project then you can either include JARs of these libraries in your project's classpath to start using them or you can use Maven for dependency management.
When you use Maven for dependency management, then it will automatically download these libraries, including the libraries they depend on, known as a transitive dependency.
For example, if you download Spring Framework then it will also download all other JARs on which Spring is dependent like Log4j etc.
You might not realize but having the right version of dependent JARs is a big headache. If you have the wrong versions of the JAR then you will get ClassNotFoundException or NoClassDefFoundError, or UnsupportedClassVersionError.
Btw, If you are a beginner or intermediate Java programmer then I also suggest you join The Complete Java MasterClass course on Udemy to fill the gaps in your knowledge. It's one of the most up-to-date courses in Java and updated for Java 7, 8, 9, 10, and 11 recently.
22 Open Source libraries for Java Programmers in 2024
Here is my collection of some of the useful third-party libraries Java developers can use in their applications to do a lot of useful tasks. In order to use these libraries, Java developers should also be familiar with that and this is the whole point of this article. If you have an idea then you can research that library and use it.1. Unit testing libraries [JUnit + Mockito]
Unit testing is the single most important thing which separates an average developer from a good developer. Programmers often are given excuses for not writing unit tests but the most common excuse for avoiding unit testing is a lack of experience and knowledge of popular unit testing libraries like JUnit, Mockito, and PowerMock.I have a goal in 2024 to improve my knowledge of unit testing and integration testing libraries like JUnit 5, Cucumber, Robot framework, etc.
I have also signed up for a JUnit and Mockito Crash Course in Udemy. Even if you know JUnit and the basics of unit testing, you may want to refresh and upgrade your knowledge in 2024.
2. JSON parsing libraries [Jackson and Gson]
In today's world of web services and the internet of things (IoT), JSON has become the go-to protocol to carry information from client to server. They have replaced XML as the most preferred way to transfer information in a platform-independent way.Unfortunately, JDK doesn't have a JSON library yet but fortunately, there are many good third-party libraries that allow you to both parse and create JSON messages like Jackson and Gson.
A Java web developer should be familiar with at least one of these libraries. If you want to know more about Jackson and JSON, I suggest going through JSON with a Java API course from Udemy, which they are offering for just $10.99 on their Udemy Sale.
3. Logging libraries [SLF4J + Log4j2]
Logging libraries are very common because you need them in every project. They are the most important thing for server-side applications because logs are only placed where you can see what's going on in your application.Even though JDK ships with its own logging library, there are many better alternatives are available like Log4j, SLF4j, and LogBack.
A Java developer should be familiar with the pros and cons of logging the library and know why using SLF4j is better than plain Log4j. If you don't know why I suggest you read my earlier article on the same subject.
4. General-purpose libraries [Apache Commons and Google's Guava]
There is a couple of very good general-purpose, third-party library available to Java developer e.g. Apache Commons and Google Guava. I always include these libraries in my projects because they simplify a lot of tasks.As Joshua Bloch has rightly said in Effective Java (now the 3rd edition is also available) that there is no point in re-inventing the wheels and we should prefer using tried and tested libraries instead of writing our own routines every now and then.
It's just for a good Java developer to get himself familiar with Google's Guava and Apache commons library.
Though JDK 9 is bringing the support of HTTP 2.0 and better support for HTTP, I strongly suggest all Java developers get familiar with popular HTTP client libraries like HttpClient and HttpCore.
You can also check What's New in Java 9 - Modules and More to learn more about JDK 9's HTTP 2 support.
The Apache Xerces2 parser is the reference implementation of XNI but other parser components, configurations, and parsers can be written using the Xerces Native Interface. Dom4j is another flexible XML framework for Java applications.
If you want to learn more about XML parsing in Java then I suggest you take a look at this list of best Java Web Service courses to learn more.
5. Http libraries [Apache HttpClient]
One thing I don't like much about JDK is its lack of support for HTTP. Though you can make HTTP connections using classes in the java.net package it's not as easy and seamless as by using open-source, third-party libraries like Apache HttpClient and HttpCore.Though JDK 9 is bringing the support of HTTP 2.0 and better support for HTTP, I strongly suggest all Java developers get familiar with popular HTTP client libraries like HttpClient and HttpCore.
You can also check What's New in Java 9 - Modules and More to learn more about JDK 9's HTTP 2 support.
6. XML parsing libraries [JAXB and Xerces]
There are many XML parsing libraries that exist like Xerces, JAXB, JAXP, Dom4j, Xstream, etc. Xerces2 is the next generation of high-performance, fully compliant XML parsers in the Apache Xerces family. This new version of Xerces introduces the Xerces Native Interface (XNI), a complete framework for building parser components and configurations that is extremely modular and easy to program.The Apache Xerces2 parser is the reference implementation of XNI but other parser components, configurations, and parsers can be written using the Xerces Native Interface. Dom4j is another flexible XML framework for Java applications.
If you want to learn more about XML parsing in Java then I suggest you take a look at this list of best Java Web Service courses to learn more.
7. Microsoft Excel reading libraries [Apache POI]
Believe it or not but all real-world application has to interact with Microsoft office in some form or other. Many application needs to provide the functionality to export data in Excel and if you have to do the same from your Java application then you need Apache POI API.This is a very rich library that allows you to both read and write XLS files from Java programs. You can see that link for a working example of reading an Excel file in the Core Java application.
8. Bytecode libraries [JavaAssist + CgLib]
If you are writing a framework or library which generate code or interact with bytecodes then you need a bytecode library. They allow you to read and modify the bytecode generated by an application. Some of the popular bytecode libraries in the Java world are javassist and Cglib Nodep.The Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation very simple. It is a class library for editing bytecodes in Java. ASM is another useful bytecode editing library.
9. Database connection pool libraries [C3P0 + DBCP]
If you are interacting with the database from Java application but not using database connection pool libraries then you are missing something. Since creating connections at runtime takes time and makes request processing slower, it's always advised to use DB connection libraries. Some of the popular ones are Commons Pool and DBCP.In a web application, it's a web server that generally provides these functionalities but in a core Java application, you need to include these connection pool libraries into your classpath to use a database connection pool. If you want to learn more about JDBC and the connection pool in a web application, I suggest you take a look at this list of best Servlet, JSP, and JDBC courses for developers.
From JDK 8, there is no reason to use Joda because you get all that functionality in the JDK 8's new Date and Time API itself but if you are working in an older Java version then JodaTime is a worth learning library.
If you want to learn more about the new Date and Time API, I suggest you please check the What's new in Java 8 course from Pluralsight. It provides a nice overview of all the important features of Java 8, including the Date and Time API.
By the way, you would need a Pluralsight membership to join this course which costs around $29 per month or $299 per year (14% discount). I highly recommend this subscription to all programmers as it provides instant access to more than 7000+ online courses to learn any tech skill. Alternatively, you can also use their 10-day-free-pass to watch this course for FREE.
It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML5 specification and parses HTML to the same DOM as modern browsers do.
For example, if you are using PreparedStatment and CallableStatement in your code then these libraries can log an exact call with parameters and how much time it took to execute.
If you want, you can also check out these free JDBC courses to learn more about the JDBC API and how to work with databases in Java.
10. Messaging libraries [RabbitMQ]
Similar to logging and database connection, messaging is also a common feature of many real-world Java applications. Java provides JMS, Java Messaging Service but that's not part of JDK and you need to include separate jms.jar. Similarly, if you are using a third-party messaging protocol like Tibco RV then you need to use a third-party JAR like tibrv.jar in your application classpath.11. PDF Libraries [iText]
Similar to Microsoft Excel and Word, PDF is another ubiquitous format. If you need to support PDF functionality in your application like exporting data in PDF files then you can use the iText and Apache FOP libraries. Both provide useful PDF related functionality but iText is richer and better and I always preferred that one. See here to learn more about iText.12. Date and Time libraries
Before Java 8, JDK's data and time libraries have so many flaws like they were not thread-safe, immutable, and error-prone and many Java developers relied on JodaTime for implementing their date and time requirement.From JDK 8, there is no reason to use Joda because you get all that functionality in the JDK 8's new Date and Time API itself but if you are working in an older Java version then JodaTime is a worth learning library.
If you want to learn more about the new Date and Time API, I suggest you please check the What's new in Java 8 course from Pluralsight. It provides a nice overview of all the important features of Java 8, including the Date and Time API.
By the way, you would need a Pluralsight membership to join this course which costs around $29 per month or $299 per year (14% discount). I highly recommend this subscription to all programmers as it provides instant access to more than 7000+ online courses to learn any tech skill. Alternatively, you can also use their 10-day-free-pass to watch this course for FREE.
13. Collection libraries [Eclipse Collections, Troove]
Even though JDK has rich collection libraries, there are some 3rd party libraries that provide more options like Apache Commons Collections, Goldman Sachs collections, Google Collections, Eclipse Collections, and Trove. The Trove library is particularly useful because it provides high-speed regular and primitive collections for Java.
FastUtil is another similar API, it extends the Java Collections Framework by providing type-specific maps, sets, lists, and priority queues with a small memory footprint and fast access and insertion; provides also big (64-bit) arrays, sets, and lists, and fast, practical I/O classes for binary and text files.
14. Email APIs
The javax.mail and Apache Commons Email - provide an API for sending an email. It is built on top of the JavaMail API, which it aims to simplify.15. HTML Parsing libraries [JSOUP]
Similar to JSON and XML, HMTL is another common format many of us have to deal with. Thankfully, we have jsoup which greatly simplifies working with HTML in Java applications. You can use JSoup to not only parse HTML but also to create HTML documentsIt provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML5 specification and parses HTML to the same DOM as modern browsers do.
16. Cryptographic library
The Apache Commons Codec package contains simple encoders and decoders for various formats such as Base64 and Hexadecimal. In addition to these widely used encoders and decoders, the codec package also maintains a collection of phonetic encoding utilities.17. Embedded SQL database library
I really love the in-memory database like H2, which you can embed in your Java application. They are great for testing your SQL scripts and running Unit tests that need a database. Btw, H2 is not the only DB, you also have Apache Derby and HSQL to choose from.18. JDBC Troubleshooting libraries
There are some good JDBC Extension libraries that exist which makes debugging easier like P6spy. It is a library that enables database data to be seamlessly intercepted and logged with no code changes to the application. You can use these to log SQL queries and their timings.For example, if you are using PreparedStatment and CallableStatement in your code then these libraries can log an exact call with parameters and how much time it took to execute.
If you want, you can also check out these free JDBC courses to learn more about the JDBC API and how to work with databases in Java.
19. Serialization libraries
Google Protocol Buffer or protobuf is a way of encoding structured data in an efficient yet extensible format. It's a richer and better alternative to Java serialization and I strongly recommend experienced Java developers to learn Google Protobuf. You can see these Google Protocol Buffer courses to learn more about Google Protocol Buffer and the gRPC framework.20. Networking libraries [Apache MINA + Netty]
Some of the useful networking libraries are Netty and Apache MINA. If you are writing an application where you need to do low-level networking tasks, consider using these libraries.21. Lombok and Testcontainer
The two more libraries which I recommend Java developers to learn in 2024 are Lombok and test containers, these two are really awesome and I have been using them more and more lately, particularly Lombok, which allows you to write much cleaner Java code than earlier possible.For example, you can create data classes by just defining attributes and Lombok can generate constructors, getter, setter, equals, hashcode, toString, and everything in between. Using Lombok in Intellij IDEA and Eclipse is also fun as they both provide excellent support for Lombok and have a dedicated plugin.
Same with testcontainers which allows you to set up your test nicely along with all of its dependency, I haven't mastered it yet but I have just started exploring and I am amazed at the power it provides. I will write more about testcontainer and Lombok in the coming weeks.
That's all about some of the useful libraries every Java developer should be familiar with. Java Ecosystem is very vast and you will find tons of libraries for doing different things. You think about something and you will find there is a library that exists to do just that. As always, Google is your best friend to find useful Java libraries but you can also take a look at Maven central repository to find some of the useful libraries for your task at hand.
If you like this article, you may find my other articles useful too:
- The Java Developer RoadMap
- 10 Things Java Developer Should Learn in 2024
- My favorite courses to learn Software Architecture
- 10 Programming Languages to explore in 2024
- 21 Books Java Developers should read in 2024
- 10 Frameworks Java and Web Developers should learn
- 10 Best Courses to learn Spring Framework
- Data Structure and Algorithms Courses to Crack Coding Interview
- 20 Java Books You Can Read in 2024
- 10 Ways to Learn a New Technology in 2024
- 10 Pluralsight Courses for Java and Web Developers
- 10 Tutorials to Learn Java 8 Better
- 10 tips to become a better Java Programmer
- 10 Tools Java Developer Should Learn in 2024
Thanks for reading this article so far. If you like this article then please share it with your friends and colleagues too. If you have any feedback or questions then please drop a note.
P.S. - And, if you want to take your Java programming skills to next level and want to learn Java in-depth then I suggest you check out this list of advanced Java Programming courses, which contain a list of the most advanced courses. It's updated to cover features of recent Java features.
Thanks for the post...
ReplyDeleteFor Unit Testing (and possibly for BDD) I'd suggest looking at SpockFramework... You write in Groovy rather than Java. I've used it for several years now and find it much more versatile than JUnit & Mockito
In p.s part there is typo , instead of 'not' . I think you want to write 'now'.
ReplyDeleteHello Joel, Indeed Spock is a great framework and very versatile for writing data driven unit tests but you need to learn Groovy, which is also good but sometime an hindrance for Java developers. If You know Groovy, then indeed, writing tests in Spock make more sense.
ReplyDeleteHello Saurabh, indeed, Effective Java 3rd Edition is updated for JDK 7, 8, and 9.
ReplyDelete��
ReplyDeleteLombok add to your collectiom. Lombok is a very useful library, it is make code more clean.
ReplyDeleteLombok never worked for me the first time I tried it
DeleteHello @Anton, indeed, Lombok is very useful, it reduces a lot of boiler code by automatically generating getter and setter methods etc. Your source file look clean and short, easier to read.
ReplyDeleteCould you please provide examples on "JDBC Troubleshooting libraries"?
ReplyDelete19. Avro is also option.(btw-for kafka not just option but preferred choice)
ReplyDeletenice post tnx
iText alternative - https://www.api2pdf.com
ReplyDeleteJob scheduler library also important you add in your list.
ReplyDeleteGreat article !
ReplyDeleteBut there is no GUI libraries.
Ex: http://javacollection.net/reflectionui/
@Unknown, what error did you got, may be we can help, Lombok is great API but I agree setting up first time in IDE might pose challenges.
ReplyDeleteVery great article
ReplyDelete