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.
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.
Byteman - Manipulate bytecode at runtime via DSL (rules); mainly for testing/troubleshooting.
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.
Checkstyle3k 2k - Static analysis of coding conventions and standards.
Error Prone4k 496 - Catches common programming mistakes as compile-time errors.
Infer8k 1k - Modern static analysis tool for verifying the correctness of code.
jQAssistant - Static code analysis with Neo4J-based query language.
NullAway2k 98 - Eliminates NullPointerExceptions with low build-time overhead.
PMD1k 497 - Source code analysis for finding bad coding practices.
SonarJava305 290 - Static analyzer for SonarQube & SonarLint.
JHipster11k 3k - 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.
Airline260 33 - 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.
Realm10k 2k - Mobile database to run directly inside phones, tablets or wearables.
Redisson2k 561 - Allows for distributed and scalable data structures on top of a Redis server.
requery2k 211 - 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.
Speedment1k 170 - 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 Queue98 26 - A big, fast and persistent queue based on memory-mapped files.
Persistent Collection - Persistent and immutable analogue of the Java Collections Framework.
Protobuf26k 8k - Google's data interchange format.
SBE1k 264 - Simple Binary Encoding, one of the fastest message formats around.
Tape2k 298 - A lightning-fast, transactional, file-based FIFO.
DCEVM - JVM modification that allows unlimited redefinition of loaded classes at runtime.
Faux Pas13 1 - 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.
HotswapAgent1k 347 - Unlimited runtime class and resource redefinition.
JavaParser2k 420 - Parse, modify and generate Java code.
ScaleCube108 33 - Embeddable Cluster-Membership library based on SWIM and gossip protocol.
Zuul3k 785 - 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.
Bitronix39 20 - 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.
packr2k 93 - 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.
CATG53 21 - 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-react390 54 - Monad and stream utilities, comprehensions, pattern matching, functional extensions for all JDK collections, future streams, trampolines and much more.
derive4j273 33 - Java 8 annotation processor and framework for deriving algebraic data types constructors, pattern-matching and morphisms.
Functional Java - Implements numerous basic and advanced programming abstractions that assist composition-oriented development.
jOOλ1k 104 - Extension to Java 8 that aims to fix gaps in lambda by providing numerous missing types and a rich set of sequential Stream API additions.
protonpack297 36 - Collection of stream utilities.
JsonPath2k 415 - Extract data from JSON using XPATH-like syntax.
JsonSurfer83 21 - Streaming JsonPath processor dedicated to processing big and complicated JSON data.
JVM and JDK
Current implementations of the JVM/JDK.
Avian981 153 - JVM with both JIT and AOT modes. Includes an iOS port.
OpenJ91k 181 - 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.
Tracer48 17 - 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.
JSAT327 146 - Algorithms for pre-processing, classification, regression, and clustering with support for multi-threaded execution.
Oryx 21k 360 - 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.
Aeron3k 372 - 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.
Modernizer158 32 - Detect uses of legacy Java APIs.
Multi-OS Engine - An open-source, cross-platform engine to develop native mobile (iOS, Android, etc.) apps.
OpenRefine - Tool for working with messy data: cleaning, transforming, extending it with web services and linking it to databases.
Polyglot for Maven312 51 - Extensions for Maven 3.3.1+ that allows writing the POM model in dialects other than XML.
Smooks174 219 - Extensible framework for building applications that process data which means bindings, transformations, message processing and enrichment.
Togglz - Implementation of the Feature Toggles pattern.
TypeTools285 45 - Tools for resolving generic types.
XMLBeam40 5 - Processes XML by using annotations or XPath within code.
OctoLinker1k 123 - Browser extension which allows to navigate through code on GitHub more efficiently.
Microservice
Tools for managing microservices: i.e., creation, coordination or discovery.
Apollo - Libraries for writing composable microservices.
consul-api14 6 - Client for the Consul API: a distributed, highly available and datacenter-aware registry/discovery service.
Eureka4k 1k - REST-based service registry for resilient load balancing and failover.
Lagom - Framework for creating microservice-based systems.
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.
JavaMelody1k 421 - Performance monitoring and profiling.
jmxtrans1k 461 - 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.
Stagemonitor1k 227 - Open-source performance monitoring and transaction tracing for JVM apps.
Sysmon146 28 - Lightweight platform monitoring tool for Java VMs.
Native
For working with platform-specific native libraries.
JavaCPP2k 314 - Provides efficient and easy access to native C++.
JNA2k 483 - Work with native libraries without writing JNI. Also provides interfaces to common system libraries.
JNR445 70 - 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.
CogCompNLP61 12 - 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.
Comsat432 59 - Integrates standard Java web-related APIs with Quasar fibers and actors.
Finagle7k 1k - 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.
gRPC4k 1k - RPC framework based on protobuf and HTTP/2.
KryoNet386 108 - 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.
Nifty728 286 - Implementation of Thrift clients and servers on Netty.
sshj1k 315 - Programatically use SSH, SCP or SFTP.
Undertow - Web server providing both blocking and non-blocking APIs based on NIO. Used as a network layer in WildFly.
urnlib5 2 - 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.
Microserver846 216 — 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.li2k 340 - 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.
RestExpress796 277 - Thin wrapper on the JBoss Netty HTTP stack that provides scaling and performance.
Restlet Framework583 282 - 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.
Science
Libraries for scientific computing, analysis and visualization.
DataMelt - Environment for scientific computation, data analysis and data visualization.
Erdos55 2 - Modular, light and easy graph framework for theoretic algorithms.
GraphStream - Library for modeling and analyzing dynamic graphs.
JGraphT990 439 - Graph library that provides mathematical graph-theory objects and algorithms.
JGraphX450 311 - Library for visualizing (mainly Swing) and interacting with node-edge graphs.
Mines Java Toolkit8 5 - 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.
Tablesaw566 157 - 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.
Hdiv130 44 - 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.
FlatBuffers9k 1k - 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.
Jade4J600 131 - 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.
Awaitility349 45 - DSL for synchronizing asynchronous operations.
ConcurrentUnit187 29 - Toolkit for testing multi-threaded and asynchronous applications.
GreenMail - In-memory email server for integration testing. Supports SMTP, POP3 and IMAP including SSL.
Hoverfly Java33 15 - Native bindings for Hoverfly, a proxy which allows you to simulate HTTP services.
REST Assured1k 343 - 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.
Cucumber2k 2k - Provides a way to describe features in a plain language which customers can understand.
Cukes-REST39 34 - 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.
Takes380 168 - 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.