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.
Infinispan - Highly concurrent key/value datastore used for caching.
Cluster Management
Frameworks that can dynamically manage applications inside of a cluster.
Apache Aurora - Mesos framework for long-running services and cron jobs.
Apache Mesos - Abstracts CPU, memory, storage, and other compute resources away from machines.
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.
Error Prone - Catches common programming mistakes as compile-time errors.
Infer - Modern static analysis tool for verifying the correctness of code.
jQAssistant - Static code analysis with Neo4J-based query language.
NullAway - Eliminates NullPointerExceptions with low build-time overhead.
PMD - Source code analysis for finding bad coding practices.
SonarJava - Static analyzer for SonarQube & SonarLint.
JHipster - Yeoman source code generator for Spring Boot and AngularJS.
Joda-Beans - Small framework that adds queryable properties to Java, enhancing JavaBeans.
Lombok - Code generator that aims to reduce verbosity.
Command-line Argument Parsers
Libraries that make it easy to parse command line options, arguments, etc.
Airline - Annotation-based framework for parsing Git-like command-line arguments.
args4j - Small library to parse command-line arguments.
JCommander - Command-line argument-parsing framework with custom types and validation via implementing interfaces.
JOpt Simple - Simple parser that uses the POSIX getopt() and GNU getopt_long() syntaxes. Uses a fluent API instead of annotations.
picocli - ANSI colors and styles in usage help. Can be included as source to avoid dependency. Annotation-based, POSIX/GNU/any syntax, subcommands, strong typing for both options and positional args.
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.
Realm - Mobile database to run directly inside phones, tablets or wearables.
Redisson - Allows for distributed and scalable data structures on top of a Redis server.
requery - A modern, lightweight but powerful object mapping and SQL generator. Easily map to or create databases, or perform queries and updates from any Java-using platform.
Speedment - Database access library that utilizes Java 8's Stream API for querying.
sql2o - Thin JDBC wrapper that simplifies database access and provides simple mapping of ResultSets to POJOs.
Vibur DBCP - JDBC connection pool library with advanced performance monitoring capabilities.
Xodus - Highly concurrent transactional schema-less and ACID-compliant embedded database.
Data Structures
Efficient and specific data structures.
Apache Avro - Data interchange format with dynamic typing, untagged data, and absence of manually assigned IDs.
Apache Orc - Fast and efficient columnar storage format for Hadoop-based workloads.
Apache Parquet - Columnar storage format based on assembly algorithms from Google's paper on Dremel.
Apache Thrift - Data interchange format that originated at Facebook.
Big Queue - A big, fast and persistent queue based on memory-mapped files.
Persistent Collection - Persistent and immutable analogue of the Java Collections Framework.
DCEVM - JVM modification that allows unlimited redefinition of loaded classes at runtime.
Faux Pas - Library that simplifies error handling by circumventing the issue that none of the functional interfaces in the Java Runtime is allowed by default to throw checked exceptions.
HotswapAgent - Unlimited runtime class and resource redefinition.
JavaParser - Parse, modify and generate Java code.
ScaleCube - Embeddable Cluster-Membership library based on SWIM and gossip protocol.
Zuul - A gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
Distributed Transactions
Distributed transactions provide a mechanism for ensuring consistency of data updates in the presence of concurrent access and partial failures.
Atomikos - Provides transactions for REST, SOA and microservices with support for JTA and XA.
Bitronix - A simple but complete implementation of the JTA 1.1 API.
Narayana - Provides support for traditional ACID and compensation transactions, also complies with JTA, JTS and other standards.
Distribution
Tools that handle the distribution of applications in native formats.
Bintray - Version control for binaries that handle publishing. Compatible with Maven or Gradle, with a free plan for open-source software as well as several business plans.
Boxfuse - Deployment of JVM applications to AWS using the principles of immutable infrastructure.
Capsule - Simple and powerful packaging and deployment. A fat JAR on steroids, or a "Docker for Java" that supports JVM-optimized containers.
Central Repository - Largest binary component repository available as a free service to the open-source community. Default used by Apache Maven, and available in all other build tools.
IzPack - Setup authoring tool for cross-platform deployments.
JitPack - Easy-to-use package repository for GitHub. Builds Maven/Gradle projects on demand and publishes ready-to-use packages.
Nexus - Binary management with proxy and caching capabilities.
packr - Packs JARs, assets and the JVM for native distribution on Windows, Linux and Mac OS X.
Libraries that assist with processing office document formats.
Apache POI - Supports OOXML (XLSX, DOCX, PPTX) as well as OLE2 (XLS, DOC or PPT).
documents4j - API for document format conversion using third-party converters such as MS Word.
docx4j - Create and manipulate Microsoft Open XML files.
Formal Verification
Formal-methods tools: proof assistants, model checking, symbolic execution, etc.
CATG - Concolic unit testing engine. Automatically generates unit tests using formal methods.
Checker Framework - Pluggable type systems. Includes nullness types, physical units, immutability types and more.
Daikon - Detects likely program invariants and generates JML specs based on those invariants.
Java Path Finder (JPF) - JVM formal verification tool containing a model checker and more. Created by NASA.
JMLOK 2.0 - Detects inconsistencies between code and JML specification through feedback-directed random tests generation, and suggests a likely cause for each nonconformance detected.
KeY - 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.
OpenJML - Translates JML specifications into SMT-LIB format and passes the proof problems implied by the program to backend solvers.
Functional Programming
Libraries that facilitate functional programming.
cyclops-react - Monad and stream utilities, comprehensions, pattern matching, functional extensions for all JDK collections, future streams, trampolines and much more.
derive4j - Java 8 annotation processor and framework for deriving algebraic data types constructors, pattern-matching and morphisms.
JsonPath - Extract data from JSON using XPATH-like syntax.
JsonSurfer - Streaming JsonPath processor dedicated to processing big and complicated JSON data.
JVM and JDK
Current implementations of the JVM/JDK.
Avian - JVM with both JIT and AOT modes. Includes an iOS port.
Graal - Polyglot virtual machine which can be embedded.
OpenJ9 - High performance, enterprise calibre, flexibly licensed, openly governed cross platform Java Virtual Machine extending and augmenting the runtime technology components from the Eclipse OMR and OpenJDK project.
tinylog - Lightweight logging framework with static logger class.
Tracer - Call tracing and log correlation in distributed systems.
Machine Learning
Tools that provide specific statistical algorithms for learning from data.
Apache Flink - Fast, reliable, large-scale data processing engine.
Apache Mahout - Scalable algorithms focused on collaborative filtering, clustering and classification.
Apache Spark - Data analytics cluster-computing framework.
DatumBox - Provides several algorithms and pre-trained models for natural language processing.
DeepDive - Creates structured information from unstructured data and integrates it into an existing database.
Deeplearning4j - Distributed and multi-threaded deep learning library.
H2O - Analytics engine for statistics over big data.
JSAT - Algorithms for pre-processing, classification, regression, and clustering with support for multi-threaded execution.
Oryx 2 - Framework for building real-time, large-scale machine learning applications. Includes end-to-end applications for collaborative filtering, classification, regression, and clustering.
Smile - The Statistical Machine Intelligence and Learning Engine provides a set of machine learning algorithms and a visualization library.
Weka - Collection of algorithms for data mining tasks ranging from pre-processing to visualization.
Messaging
Tools that help send messages between clients to ensure protocol independency.
Aeron - Efficient, reliable, unicast and multicast message transport.
Apache ActiveMQ - Message broker that implements JMS and converts synchronous to asynchronous communication.
Apache Camel - Glues together different transport APIs via Enterprise Integration Patterns.
inspectIT - Captures detailed run-time information via hooks that can be changed on the fly. It supports tracing over multiple systems via the OpenTracing API and can correlate the data with end user monitoring.
Instrumental - Real-time Java application performance monitoring. A commercial service with free development accounts.
JavaMelody - Performance monitoring and profiling.
jmxtrans - Connect to multiple JVMs and query them for their attributes via JMX. Its query language is based on JSON, which allows non-Java programmers to access the JVM attributes. Supports different output writes, including Graphite, Ganglia, and StatsD.
Prometheus - Provides a multi-dimensional data model, DSL, autonomous server nodes and much more.
SPM - Performance monitor with distributing transaction tracing for JVM apps.
Stagemonitor - Open-source performance monitoring and transaction tracing for JVM apps.
Sysmon - Lightweight platform monitoring tool for Java VMs.
zipkin - Distributed tracing system which gathers timing data needed to troubleshoot latency problems in microservice architectures.
Native
For working with platform-specific native libraries.
JavaCPP - Provides efficient and easy access to native C++.
JNA - Work with native libraries without writing JNI. Also provides interfaces to common system libraries.
JNR - Work with native libraries without writing JNI. Also provides interfaces to common system libraries. Same goals as JNA, but faster, and serves as the basis for the upcoming Project Panama.
Natural Language Processing
Libraries that specialize in processing text.
CogCompNLP - Provides common annotators for plain text input.
CoreNLP - Provides a set of fundamental tools for tasks like tagging, named entity recognition, and sentiment analysis.
DKPro - Collection of reusable NLP tools for linguistic pre-processing, machine learning, lexical resources, etc.
LingPipe - Toolkit for tasks ranging from POS tagging to sentiment analysis.
Networking
Libraries for building network servers.
Comsat - Integrates standard Java web-related APIs with Quasar fibers and actors.
Finagle - Extensible RPC system for constructing high-concurrency servers. It implements uniform client and server APIs for several protocols, and is protocol-agnostic to simplify implementation of new protocols.
Grizzly - NIO framework. Used as a network layer in Glassfish.
gRPC - RPC framework based on protobuf and HTTP/2.
KryoNet - Provides a clean and simple API for efficient TCP and UDP client/server network communication using NIO and Kryo.
MINA - Abstract, event-driven async I/O API for network operations over TCP/IP and UDP/IP via Java NIO.
Netty - Framework for building high-performance network applications.
Nifty - Implementation of Thrift clients and servers on Netty.
Undertow - Web server providing both blocking and non-blocking APIs based on NIO. Used as a network layer in WildFly.
urnlib - Represent, parse and encode URNs, as in RFC 2141.
ORM
APIs that handle the persistence of objects.
Apache Cayenne - Provides a clean, static API for data access. Also includes a GUI Modeler for working with database mappings, and DB reverse engineering and generation.
Microserver — A convenient, extensible microservices plugin system for Spring & Spring Boot. With more than 30 plugins and growing, it supports both micro-monolith and pure microservices styles.
Rapidoid - A simple, secure and extremely fast framework consisting of an embedded HTTP server, GUI components and dependency injection.
rest.li - Framework for building robust, scalable RESTful architectures using typesafe bindings and asynchronous, non-blocking IO with an end-to-end developer workflow that promotes clean practices, uniform interface design and consistent data modeling.
RESTEasy - Fully certified and portable implementation of the JAX-RS specification.
RestExpress - Thin wrapper on the JBoss Netty HTTP stack that provides scaling and performance.
Restlet Framework - Pioneering framework with powerful routing and filtering capabilities, and a unified client and server API.
Crnk - Implementation of the JSON API specification to build resource-oriented REST endpoints with sorting, filtering, paging, linking, object graphs, type-safety, bulk updates, integrations and more.
Swagger - Standard, language-agnostic interface to REST APIs.
Science
Libraries for scientific computing, analysis and visualization.
DataMelt - Environment for scientific computation, data analysis and data visualization.
Erdos - Modular, light and easy graph framework for theoretic algorithms.
GraphStream - Library for modeling and analyzing dynamic graphs.
JGraphT - Graph library that provides mathematical graph-theory objects and algorithms.
JGraphX - Library for visualizing (mainly Swing) and interacting with node-edge graphs.
Mines Java Toolkit - Library for geophysical scientific computation, visualization and digital signal analysis.
Morpheus - Provides a versatile two-dimensional memory efficient tabular data structure called a DataFrame to enable efficient in-memory analytics for scientific computing on the JVM.
Tablesaw - Includes a data-frame, an embedded column store, and hundreds of methods to transform, summarize, or filter data.
Search
Engines that index documents for search and analysis.
Apache Lucene - High-performance, full-featured, cross-platform, text search engine library.
Apache Solr - Enterprise search engine optimized for high-volume traffic.
Elasticsearch - Distributed, multitenant-capable, full-text search engine with a RESTful web interface and schema-free JSON documents.
Security
Libraries that handle security, authentication, authorization or session management.
Apache Shiro - Performs authentication, authorization, cryptography and session management.
Bouncy Castle - All-purpose cryptographic library and JCA provider offering a wide range of functions, from basic helpers to PGP/SMIME operations.
Cryptomator - Multiplatform, transparent, client-side encryption of files in the cloud.
Hdiv - Runtime application that repels application security risks included in the OWASP Top 10, including SQL injection, cross-site scripting, cross-site request forgery, data tampering, and brute force attacks.
PicketLink - Umbrella project for security and identity management.
Vault - Secures, stores, and tightly controls access to tokens, passwords, certificates, API keys, and other secrets. It handles leasing, key revocation, key rolling, and auditing. Through a unified API, users can access an encrypted Key/Value store and network encryption-as-a-service, or generate AWS IAM/STS credentials, SQL/NoSQL databases, X.509 certificates, SSH credentials, and more.
Serialization
Libraries that handle serialization with high efficiency.
FlatBuffers - Memory-efficient serialization library that can access serialized data without unpacking and parsing it.
WildFly - Formerly known as JBoss and developed by Red Hat with extensive Java EE support.
Template Engine
Tools that substitute expressions in a template.
Handlebars.java - Logicless and semantic Mustache templates.
Jade4J - Implementation of Pug (formerly known as Jade).
Jtwig - Modular, configurable and fully tested template engine.
Pebble - Inspired by Twig and separates itself with its inheritance feature and its easy-to-read syntax. It ships with built-in autoescaping for security and it includes integrated support for internationalization.
Thymeleaf - Aims to be a substitute for JSP and works for XML files.
Testing
Tools that test from model to the view.
Asynchronous
Tools that simplify testing asynchronous services.
Awaitility - DSL for synchronizing asynchronous operations.
ConcurrentUnit - Toolkit for testing multi-threaded and asynchronous applications.
GreenMail - In-memory email server for integration testing. Supports SMTP, POP3 and IMAP including SSL.
Hoverfly Java - Native bindings for Hoverfly, a proxy which allows you to simulate HTTP services.
REST Assured - DSL for easy testing of REST/HTTP services.
BDD
Testing for the software development process that emerged from TDD and was heavily influenced by DDD and OOAD.
Cucumber - Provides a way to describe features in a plain language which customers can understand.
Cukes-REST - A collection of Gherkin steps for REST-service testing using Cucumber.
Play - Built on Akka, it provides predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications in Java and Scala.
PrimeFaces - JSF framework with both free and commercial/support versions and frontend components.
Ratpack - Set of libraries that facilitate fast, efficient, evolvable and well-tested HTTP applications.
Takes - Opinionated web framework which is built around the concepts of True Object-Oriented Programming and immutability.
Vaadin - Event-driven framework built on top of GWT. Uses server-side architecture with Ajax on the client side.
Resources
Awesome Lists
Awesome lists related to the Java & JVM ecosystem.
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.
Josh Long - Spring Advocate at Pivotal, author of O'Reilly's Cloud Native Java- and Building Microservices with Spring Boot, JavaOne Rock Star.
Lukas Eder - Java Champion, speaker, JUG.ch co-leader, Founder and CEO Data Geekery (jOOQ).
Mario Fusco - RedHatter, JUG coordinator, frequent speaker and author.
Mark Heckler - Pivotal Principal Technologist and Developer Advocate, conference speaker, published author, and Java Champion, focusing on Internet of Things and the cloud.
Mark Reinhold - Chief Architect, Java Platform Group, Oracle.
REF
Awesome Java
A curated list of awesome Java frameworks, libraries and software.
Contents
Projects
Bean Mapping
Frameworks that ease bean mapping.
Build
Tools that handle the build cycle and dependencies of an application.
Bytecode Manipulation
Libraries to manipulate bytecode programmatically.
Caching
Libraries that provide caching facilities.
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.
Code Generators
Tools that generate patterns for repetitive code in order to reduce verbosity and error-proneness.
Command-line Argument Parsers
Libraries that make it easy to parse command line options, arguments, etc.
Compiler-compiler
Frameworks that help to create parsers, interpreters or compilers.
Configuration
Libraries that provide external configuration.
Constraint Satisfaction Problem Solver
Libraries that help with implementing optimization and satisfiability problems.
CSV
Frameworks and libraries that simplify reading/writing CSV data.
Database
Everything that simplifies interactions with the database.
Data Structures
Efficient and specific data structures.
Date and Time
Libraries related to handling date and time.
Dependency Injection
Libraries that help to realize the Inversion of Control 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.
Formal Verification
Formal-methods tools: proof assistants, model checking, symbolic execution, etc.
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.
Imagery
Libraries that assist with the creation, evaluation or manipulation of graphical images.
JSON
Libraries for serializing and deserializing JSON to and from Java objects.
JSON Processing
Libraries for processing data in JSON format.
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.
Miscellaneous
Everything else.
Microservice
Tools for creating and managing microservices.
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 file creation.
Performance analysis
Tools for performance analysis, profiling and benchmarking.
Platform
Frameworks that are suites of multiple libraries encompassing several categories.
Apache Commons
Other
Reactive libraries
Libraries for developing reactive applications.
REST Frameworks
Frameworks specifically for creating RESTful services.
Science
Libraries for scientific computing, analysis and visualization.
Search
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.
Parameterization
Simplifies the writing of parameterized tests.
Utility
Libraries which provide general utility functions.
Version Managers
Utilities that help create the development shell environment and switch between different Java versions.
Web Crawling
Libraries that analyze the content of websites.
Web Frameworks
Frameworks that handle the communication between the layers of a web application.
Resources
Awesome Lists
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.
Twitter
Active accounts to follow. Descriptions from Twitter.
Websites
Sites to read.
Contributing
Contributions are very welcome!
Please have a look at the CONTRIBUTING guidelines.