Awesome Java Awesomeopen in new window

A curated list of awesome Java frameworks, libraries and software.

Contents

Projects

Bean Mapping

Frameworks that ease bean mapping.

  • dOOvopen in new window - Provides fluent API for typesafe domain model validation and mapping. It uses annotations, code generation and a type safe DSL to make bean validation and mapping fast and easy.
  • JMapperopen in new window - Uses byte code manipulation for lightning-fast mapping. Supports annotations and API or XML configuration.
  • MapStructopen in new window - Code generator that simplifies mappings between different bean types, based on a convention-over-configuration approach.
  • ModelMapperopen in new window - Intelligent object mapping library that automatically maps objects to each other.
  • Orikaopen in new window - JavaBean-mapping framework that recursively copies (among other capabilities) data from one object to another.
  • reMapopen in new window - Lambda and method handle-based mapping which requires code and not annotations if objects have different names.
  • Selmaopen in new window - Annotation processor-based bean mapper.

Build

Tools that handle the build cycle and dependencies of an application.

  • Apache Mavenopen in new window - Declarative build and dependency management that favors convention over configuration. It might be preferable to Apache Ant, which uses a rather procedural approach and can be difficult to maintain.
  • Bazelopen in new window - Tool from Google that builds code quickly and reliably.
  • Buckopen in new window - Encourages the creation of small, reusable modules consisting of code and resources.
  • Gradleopen in new window - Incremental builds programmed via Groovy instead of declaring XML. Works well with Maven's dependency management.

Bytecode Manipulation

Libraries to manipulate bytecode programmatically.

Caching

Libraries that provide caching facilities.

CLI

Libraries for everything related to the CLI.

Cluster Management

Frameworks that can dynamically manage applications inside of a cluster.

Code Analysis

Tools that provide metrics and quality measurements.

Code Coverage

Frameworks and tools that enable code coverage metrics collection for test suites.

  • Cloveropen in new window - Relies on source-code instrumentation instead of bytecode instrumentation.
  • Coberturaopen in new window - Relies on offline (or static) bytecode instrumentation and class loading to collect code coverage metrics. (GPL-2.0-only)
  • JaCoCoopen in new window - Framework that enables collection of code coverage metrics, using both offline and runtime bytecode instrumentation.

Code Generators

Tools that generate patterns for repetitive code in order to reduce verbosity and error-proneness.

Compiler-compiler

Frameworks that help to create parsers, interpreters or compilers.

Computer Vision

Libraries which seek to gain high level information from images and videos.

Configuration

Libraries that provide external configuration.

Constraint Satisfaction Problem Solver

Libraries that help with implementing optimization and satisfiability problems.

  • Chocoopen in new window - Off-the-shelf constraint satisfaction problem solver that uses constraint programming techniques.
  • JaCoPopen in new window - Includes an interface for the FlatZinc language, enabling it to execute MiniZinc models. (AGPL-3.0)
  • OptaPlanneropen in new window - Business planning and resource scheduling optimization solver.
  • Timefoldopen in new window - Flexible solver with Spring/Quarkus support and quickstarts for the Vehicle Routing Problem, Maintenance Scheduling, Employee Shift Scheduling and much more.

CSV

Frameworks and libraries that simplify reading/writing CSV data.

Data Structures

Efficient and specific data structures.

Database

Everything that simplifies interactions with the database.

Date and Time

Libraries related to handling date and time.

Dependency Injection

Libraries that help to realize the Inversion of Controlopen in new window paradigm.

Development

Augmentation of the development process at a fundamental level.

Distributed Applications

Libraries and frameworks for writing distributed and fault-tolerant applications.

Distributed Transactions

Distributed transactions provide a mechanism for ensuring consistency of data updates in the presence of concurrent access and partial failures.

Distribution

Tools that handle the distribution of applications in native formats.

Document Processing

Libraries that assist with processing office document formats.

Financial

Libraries related to the financial domain.

Formal Verification

Formal-methods tools: proof assistants, model checking, symbolic execution, etc.

  • CATGopen in new window - Concolic unit testing engine. Automatically generates unit tests using formal methods.
  • Checker Frameworkopen in new window - Pluggable type systems. Includes nullness types, physical units, immutability types and more. (GPL-2.0-only WITH Classpath-exception-2.0)
  • Daikonopen in new window - Detects likely program invariants and generates JML specs based on those invariants.
  • Java Path Finder (JPF)open in new window - JVM formal verification tool containing a model checker and more. Created by NASA.
  • JMLOK 2.0open in new window - Detects inconsistencies between code and JML specification through feedback-directed random tests generation, and suggests a likely cause for each nonconformance detected. (GPL-3.0-only)
  • KeYopen in new window - Formal software development tool that aims to integrate design, implementation, formal specification, and formal verification of object-oriented software as seamlessly as possible. Uses JML for specification and symbolic execution for verification. (GPL-2.0-or-later)
  • OpenJMLopen in new window - Translates JML specifications into SMT-LIB format and passes the proof problems implied by the program to backend solvers. (GPL-2.0-only)

Functional Programming

Libraries that facilitate functional programming.

Game Development

Frameworks that support the development of games.

Geospatial

Libraries for working with geospatial data and algorithms.

GUI

Libraries to create modern graphical user interfaces.

High Performance

Everything about high-performance computation, from collections to specific libraries.

HTTP Clients

Libraries that assist with creating HTTP requests and/or binding responses.

Hypermedia Types

Libraries that handle serialization to hypermedia types.

IDE

Integrated development environments that try to simplify several aspects of development.

  • Eclipseopen in new window - Established open-source project with support for lots of plugins and languages.
  • IntelliJ IDEA copen in new window - Supports many JVM languages and provides good options for Android development. The commercial edition targets the enterprise sector.
  • jGRASPopen in new window - Created to provide software visualizations that work in conjunction with the debugger such as Control Structure Diagrams, UML class diagrams and Object Viewer.
  • NetBeansopen in new window - Provides integration for several Java SE and EE features, from database access to HTML5.
  • Visual Studio Codeopen in new window - Provides Java support for lightweight projects with a simple, modern workflow by using extensions from the internal marketplace.

Imagery

Libraries that assist with the creation, evaluation or manipulation of graphical images.

Introspection

Libraries that help make the Java introspection and reflection API easier and faster to use.

  • ClassGraphopen in new window - ClassGraph (formerly FastClasspathScanner) is an uber-fast, ultra-lightweight, parallelized classpath scanner and module scanner for Java, Scala, Kotlin and other JVM languages.
  • jOORopen in new window - jOOR stands for jOOR Object Oriented Reflection. It is a simple wrapper for the java.lang.reflect package.
  • Mirroropen in new window - Mirror was created to bring light to a simple problem, usually named ReflectionUtil, which is on almost all projects that rely on reflection to do advanced tasks.
  • Objenesisopen in new window - Allows dynamic instantiation without default constructor, e.g. constructors which have required arguments, side effects or throw exceptions.
  • ReflectASMopen in new window - ReflectASM is a very small Java library that provides high performance reflection by using code generation.
  • Reflectionsopen in new window - Reflections scans your classpath, indexes the metadata, allows you to query it on runtime and may save and collect that information for many modules within your project.

Job Scheduling

Libraries for scheduling background jobs.

  • JobRunropen in new window - Job scheduling library which utilizes lambdas for fire-and-forget, delayed and recurring jobs. Guarantees execution by single scheduler instance using optimistic locking. Has features for persistence, minimal dependencies and is embeddable.
  • Quartzopen in new window - Feature-rich, open source job scheduling library that can be integrated within virtually any Java application.
  • Sundialopen in new window - Lightweight framework to simply define jobs, define triggers and start the scheduler.
  • Wispopen in new window - Simple library with minimal footprint and straightforward API.
  • db-scheduleropen in new window - Persistent and cluster-friendly scheduler.
  • easy-batchopen in new window - Set up batch jobs with simple processing pipelines. Records are read in sequence from a data source, processed in pipeline and written in batches to a data sink.
  • shedlockopen in new window - Makes sure that your scheduled tasks are executed at most once at the same time. If a task is being executed on one node, it acquires a lock which prevents execution of the same task from another node or thread.

JSON

Libraries for serializing and deserializing JSON to and from Java objects.

JVM and JDK

Current implementations of the JVM/JDK.

Logging

Libraries that log the behavior of an application.

Machine Learning

Tools that provide specific statistical algorithms for learning from data.

Messaging

Tools that help send messages between clients to ensure protocol independency.

Microservice

Tools for creating and managing microservices.

Miscellaneous

Everything else.

Mobile Development

Tools for creating or managing mobile applications.

Monitoring

Tools that monitor applications in production.

Native

For working with platform-specific native libraries.

Natural Language Processing

Libraries that specialize in processing text.

Networking

Libraries for building network servers.

ORM

APIs that handle the persistence of objects.

PaaS

Java platform as a service.

PDF

Tools to help with PDF files.

Performance analysis

Tools for performance analysis, profiling and benchmarking.

Platform

Frameworks that are suites of multiple libraries encompassing several categories.

Apache Commons

Other

Processes

Libraries that help the management of operating system processes.

Reactive libraries

Libraries for developing reactive applications.

REST Frameworks

Frameworks specifically for creating RESTful services.

Science

Libraries for scientific computing, analysis and visualization.

Engines that index documents for search and analysis.

Security

Libraries that handle security, authentication, authorization or session management.

Serialization

Libraries that handle serialization with high efficiency.

Server

Servers specifically used to deploy applications.

Template Engine

Tools that substitute expressions in a template.

Testing

Tools that test from model to the view.

Asynchronous

Tools that simplify testing asynchronous services.

BDD

Testing for the software development process that emerged from TDD and was heavily influenced by DDD and OOAD.

Fixtures

Everything related to the creation and handling of random data.

Frameworks

Provide environments to run tests for a specific use case.

Matchers

Libraries that provide custom matchers.

Miscellaneous

Other stuff related to testing.

Mocking

Tools which mock collaborators to help testing single, isolated units.

Utility

Libraries which provide general utility functions.

Version Managers

Utilities that help create the development shell environment and switch between different Java versions.

  • jabbaopen in new window - Java Version Manager inspired by nvm. Supports macOS, Linux and Windows.
  • jenvopen in new window - Java Version Manager inspired by rbenv. Can configure globally or per project. Tested on Debian and macOS.
  • SDKManopen in new window - Java Version Manager inspired by RVM and rbenv. Supports UNIX-based platforms and Windows.

Web Crawling

Libraries that analyze the content of websites.

Web Frameworks

Frameworks that handle the communication between the layers of a web application.

Workflow Orchestration Engines

Resources

Awesome Lists related to the Java & JVM ecosystem.

Communities

Active discussions.

Frontends

Websites that provide a frontend for this list. Please note, there won't be an official website. We don't associate with a particular website and everybody is allowed to create one.

Influential Books

Books that made a big impact and are still worth reading.

Podcasts and Screencasts

Something to look at or listen to while programming.

People

Twitter

Active accounts to follow. Descriptions from Twitter.

Other

Websites

Sites to read.

Contributing

Contributions are very welcome!

Please have a look at the CONTRIBUTINGopen in new window guidelines and the validation toolsopen in new window.

Last Updated:
Contributors: Thorben Stangenberg