- Java Version: 25, use JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64/ (compiler release target is 17 for embedded modules, 25 for server modules — see
maven.compiler.releasein the root pom.xml or in the module pom for overrides) - Build Tool: Maven (Multi-module)
- Key Frameworks: JUnit 5, AssertJ
- build/bom: BOM to be used by other projects to set versions for Infinispan-specific dependencies
- build/configuration: dependency versions, configuration and branding properties.
- api: Common API. Depended on by almost every other module.
- commons/all: Shared utilities. Low-level helpers used across modules.
- core: Core implementation for embedded caches. Most modules depend on this.
- counter: Clustered counters implementation. Depends on core.
- lock: Clustered lock implementation. Depends on core.
- multimap: Multimap implementation. Depends on core.
- query: Embedded query implementation. Depends on core and Hibernate Search.
- client/hotrod-client: Hot Rod client. Independent of server modules.
- server/core: Base server module. Foundation for all protocol modules.
- server/resp: Server module implementing the Redis protocol. Depends on server/core.
- server/memcached: Server module implementing the Memcached protocol. Depends on server/core.
- server/hotrod: Server module implementing the Hot Rod protocol. Depends on server/core.
- server/router: Server module implementing the single-port router. Depends on protocol modules.
- server/runtime: Server integration module that aggregates all protocol modules — build this to test end-to-end server changes.
- server/tests: Server integration testsuite. Used for verifying that the modules work together as well as ensuring codepaths work when authorization is applied.
- Full build (skip tests):
mvn install -DskipTests -Dcheckstyle.skip - Build a single module:
mvn install -pl core -DskipTests -Dcheckstyle.skip - Build a module and its dependencies:
mvn install -pl server/runtime -am -DskipTests -Dcheckstyle.skip - Run a single test class:
mvn verify -pl core -Dtest=SomeTest - Run a single integration test:
mvn verify -pl server/tests -Dit.test=SomeTestIT - Run a single test method:
mvn verify -pl core -Dtest=SomeTest#testMethod - Format code before committing:
mvn spotless:apply
When working in a specific module, check for an AI-CODE.md in that module's directory for additional guidelines.
- Style: Functional programming patterns where possible; use Records for DTOs.
- Javadocs: Required for public API classes and methods. Optional for internal code (but encouraged where they help developers). Unnecessary for test classes and methods.
- Testing: Aim for 75% coverage as a guideline, not a hard target. Focus test effort on meaningful logic and edge cases — do not work too hard to cover boilerplate exception handlers and trivial branches. Enable coverage collection with Jacoco using the
-Pcoveragemaven profile. - Coding style: Avoid checkstyle checks using
-Dcheckstyle.skipand focus on implementation. Usemvn spotless:applyto format the code before committing. - Commit logs: commit logs must always start with a line at the top formatted as
[#00000] Summary. - PRs: Use the pull request template in
.github/pull_request_template.mdfor PR descriptions. - Git branches: branches should always be named
issueid/issue_summaryand useorigin/mainas the upstream
- Issues: Use GitHub issue types (Bug, Feature, Task, Epic) instead of labels for classification. Each type has a template in
.github/ISSUE_TEMPLATE/that must be filled in when opening issues.
- Operator: The Infinispan Operator source code is in ../infinispan-operator
- Website: The Infinispan website source code is in ../infinispan.github.io
- ProtoStream: The ProtoStream source code is in ../protostream
- Console: The Infinispan Console source code is in ../infinispan-console
- C++ client: The C++ client source code is in ../infinispan-cpp-client
- JS client: The JS Hot Rod client source code is in ../infinispan-js-client
- Go client: The Go Hot Rod client source code is in ../infinispan-go-client
- .NET client: The .NET Core client source code is in ../Infinispan.Hotrod.Core
- Python client: The Python Hot Rod client source code is in ../infinispan-python-client
- Tutorials: The Infinispan simple tutorials source code is in ../infinispan-simple-tutorials