Awesome Java
A curated list of awesome Java frameworks, libraries and software.
Contents
- Projects
- Bean Mapping
- Build
- Bytecode Manipulation
- Caching
- CLI
- Cluster Management
- Code Analysis
- Code Coverage
- Code Generators
- Compiler-compiler
- Computer Vision
- Configuration
- Constraint Satisfaction Problem Solver
- CSV
- Data Structures
- Database
- Date and Time
- Dependency Injection
- Development
- Distributed Applications
- Distributed Transactions
- Distribution
- Document Processing
- Financial
- Formal Verification
- Functional Programming
- Game Development
- Geospatial
- GUI
- High Performance
- HTTP Clients
- Hypermedia Types
- IDE
- Imagery
- Introspection
- Job Scheduling
- JSON
- JVM and JDK
- Logging
- Machine Learning
- Messaging
- Microservice
- Miscellaneous
- Mobile Development
- Monitoring
- Native
- Natural Language Processing
- Networking
- ORM
- PaaS
- Performance analysis
- Platform
- Processes
- Reactive libraries
- REST Frameworks
- Science
- Search
- Security
- Serialization
- Server
- Template Engine
- Testing
- Utility
- Version Managers
- Web Crawling
- Web Frameworks
- Workflow Orchestration Engines
- Resources
- Contributing
Projects
Bean Mapping
Frameworks that ease bean mapping.
- dOOv - 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.
- JMapper - Uses byte code manipulation for lightning-fast mapping. Supports annotations and API or XML configuration.
- MapStruct - Code generator that simplifies mappings between different bean types, based on a convention-over-configuration approach.
- ModelMapper - Intelligent object mapping library that automatically maps objects to each other.
- Orika - JavaBean-mapping framework that recursively copies (among other capabilities) data from one object to another.
- reMap - Lambda and method handle-based mapping which requires code and not annotations if objects have different names.
- Selma - Annotation processor-based bean mapper.
Build
Tools that handle the build cycle and dependencies of an application.
- Apache Maven - 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.
- Bazel - Tool from Google that builds code quickly and reliably.
- Buck - Encourages the creation of small, reusable modules consisting of code and resources.
- Gradle - Incremental builds programmed via Groovy instead of declaring XML. Works well with Maven's dependency management.
Bytecode Manipulation
Libraries to manipulate bytecode programmatically.
- ASM - All-purpose, low-level bytecode manipulation and analysis.
- Byte Buddy - Further simplifies bytecode generation with a fluent API.
- bytecode-viewer - Java 8 Jar & Android APK reverse engineering suite. (GPL-3.0-only)
- Byteman - Manipulate bytecode at runtime via DSL (rules); mainly for testing/troubleshooting. (LGPL-2.1-or-later)
- cglib - Bytecode generation library.
- Javassist - Tries to simplify bytecode editing.
- Maker - Provides low level bytecode generation.
- Mixin - Manipulate bytecode at runtime using real Java code.
- Perses - Dynamically injects failure/latency at the bytecode level according to principles of chaos engineering.
- Recaf - JVM reverse engineering toolkit, essentially an IDE for Java bytecode.
Caching
Libraries that provide caching facilities.
- cache2k - In-memory high performance caching library.
- Caffeine - High-performance, near-optimal caching library.
- Ehcache - Distributed general-purpose cache.
- Infinispan - Highly concurrent key/value datastore used for caching.
CLI
Libraries for everything related to the CLI.
Argument Parsing
Libraries to assist with parsing command line arguments.
- Airline - Annotation-based framework for parsing Git-like command-line arguments.
- JCommander - Command-line argument-parsing framework with custom types and validation via implementing interfaces.
- jbock - Reflectionless command line parser.
- JLine - Includes features from modern shells like completion or history.
- picocli - ANSI colors and styles in usage help with annotation-based POSIX/GNU/any syntax, subcommands, strong typing for both options and positional args.
Text-Based User Interfaces
Libraries that provide TUI frameworks, or building blocks related functions.
- Jansi - ANSI escape codes to format console output.
- Jexer - Advanced console (and Swing) text user interface (TUI) library, with mouse-draggable windows, built-in terminal window manager, and sixel image support. Looks like Turbo Vision.
- Text-IO - Aids the creation of full console-based applications.
- Lanterna - Easy console text-GUI library, similar to curses. (LGPL-3.0-only)
Cluster Management
Frameworks that can dynamically manage applications inside of a cluster.
- Apache Aurora - Mesos framework for long-running services and cron jobs.
- Singularity - Mesos framework that makes deployment and operations easy. It supports web services, background workers, scheduled jobs, and one-off tasks.
Code Analysis
Tools that provide metrics and quality measurements.
- Checkstyle - Static analysis of coding conventions and standards. (LGPL-2.1-or-later)
- Error Prone - Catches common programming mistakes as compile-time errors.
- Error Prone Support - Error Prone extensions: extra bug checkers and a large battery of Refaster templates.
- Infer - Modern static analysis tool for verifying the correctness of code.
- jQAssistant - Static code analysis with Neo4J-based query language. (GPL-3.0-only)
- NullAway - Eliminates NullPointerExceptions with low build-time overhead.
- PMD - Source code analysis for finding bad coding practices.
- p3c - Provides Alibaba's coding guidelines for PMD, IDEA and Eclipse.
- RefactorFirst - Identifies and prioritizes God Classes and Highly Coupled classes.
- SonarJava - Static analyzer for SonarQube & SonarLint. (LGPL-3.0-only)
- Spoon - Library for analyzing and transforming Java source code.
- Spotbugs - Static analysis of bytecode to find potential bugs. (LGPL-2.1-only)
Code Coverage
Frameworks and tools that enable code coverage metrics collection for test suites.
- Clover - Relies on source-code instrumentation instead of bytecode instrumentation.
- Cobertura - Relies on offline (or static) bytecode instrumentation and class loading to collect code coverage metrics. (GPL-2.0-only)
- JaCoCo - 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.
- ADT4J - JSR-269 code generator for algebraic data types.
- Auto - Generates factory, service, and value classes.
- Avaje Http Server - Generates Lightweight JAX-RS style http servers using Javalin or Helidon (Nima) SE.
- Bootify ![c] - Browser-based Spring Boot app generation with JPA model and REST API.
- FreeBuilder - Automatically generates the Builder pattern.
- Geci - Discovers files that need generated code, updates automatically and writes to the source with a convenient API.
- Immutables - Annotation processors to generate simple, safe and consistent value objects.
- JavaPoet - API to generate source files.
- JHipster - Yeoman source code generator for Spring Boot and AngularJS.
- Joda-Beans - Small framework that adds queryable properties to Java, enhancing JavaBeans.
- JPA Buddy ![c] - Plugin for IntelliJ IDEA. Provides visual tools for generating JPA entities, Spring Data JPA repositories, Liquibase changelogs and SQL scripts. Offers automatic Liquibase/Flyway script generation by comparing model to DB, and reverse engineering JPA entities from DB tables.
- Lombok - Code generator that aims to reduce verbosity.
- Record-Builder - Companion builder class, withers and templates for Java records.
- Telosys - Simple and light code generator available as an Eclipse Plugin and also as a CLI.
Compiler-compiler
Frameworks that help to create parsers, interpreters or compilers.
- ANTLR - Complex full-featured framework for top-down parsing.
- JavaCC - Parser generator that generates top-down parsers. Allows lexical state switching and permits extended BNF specifications.
- JFlex - Lexical analyzer generator.
Computer Vision
Libraries which seek to gain high level information from images and videos.
- BoofCV - Library for image processing, camera calibration, tracking, SFM, MVS, 3D vision, QR Code and much more.
- ImageJ - Medical image processing application with an API.
- JavaCV - Java interface to OpenCV, FFmpeg, and much more.
Configuration
Libraries that provide external configuration.
- avaje config - Loads yaml and properties files, supports dynamic configuration, plugins, file-watching and config event listeners.
- centraldogma - Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2.
- config - Configuration library supporting Java properties, JSON or its human optimized superset HOCON.
- Configurate - Configuration library with support for various configuration formats and transformations.
- Curator Framework - High-level API for Apache ZooKeeper.
- dotenv - Twelve-factor configuration library which uses environment-specific files.
- Externalized Properties - Lightweight yet powerful configuration library which supports resolution of properties from external sources and an extensible post-processing/conversion mechanism.
- Gestalt - Gestalt offers a comprehensive solution to the challenges of configuration management. It allows you to source configuration data from multiple inputs, merge them intelligently, and present them in a structured, type-safe manner.
- ini4j - Provides an API for handling Windows' INI files.
- KAConf - Annotation-based configuration system for Java and Kotlin.
- microconfig - Configuration system designed for microservices which helps to separate configuration from code. The configuration for different services can have common and specific parts and can be dynamically distributed.
- owner - Reduces boilerplate of properties.
Constraint Satisfaction Problem Solver
Libraries that help with implementing optimization and satisfiability problems.
- Choco - Off-the-shelf constraint satisfaction problem solver that uses constraint programming techniques.
- JaCoP - Includes an interface for the FlatZinc language, enabling it to execute MiniZinc models. (AGPL-3.0)
- OptaPlanner - Business planning and resource scheduling optimization solver.
- Timefold - 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.
- FastCSV - Performance-optimized, dependency-free and RFC 4180 compliant.
- jackson-dataformat-csv - Jackson extension for reading and writing CSV.
- opencsv - Simple CSV parser.
- Super CSV - Powerful CSV parser with support for Dozer, Joda-Time and Java 8.
- uniVocity-parsers - One of