This document describes the enhanced cache configuration functionality in Maven's DefaultRequestCache.
The DefaultRequestCache supports configurable reference types and cache scopes through user-defined selectors. This allows fine-grained control over caching behavior for different request types.
doCache method now returns early when the request session is not a Session instance (e.g., ProtoSession).maven.cache.config
[ParentRequestType] RequestType { scope: <scope>, ref: <reference> }
Where:
RequestType: Short interface name implemented by the request (e.g., ModelBuilderRequest)ParentRequestType: Optional parent request interface name or * for any parentscope: Cache retention scope (optional)ref: Reference type for cache entries (optional)Note:
scope or only ref - missing values will be merged from less specific selectors or use defaults.ModelBuilderRequest interface even if the actual class is DefaultModelBuilderRequest.session: SESSION_SCOPED - retained for Maven session durationrequest: REQUEST_SCOPED - retained for current build requestpersistent: PERSISTENT - persisted across Maven invocationsdisabled: DISABLED - no caching performedsoft: SOFT - cleared before OutOfMemoryErrorhard: HARD - never cleared by GCweak: WEAK - cleared more aggressivelynone: NONE - no caching (always compute)mvn clean install -Dmaven.cache.config="ModelBuilderRequest { scope: session, ref: hard }"
mvn clean install -Dmaven.cache.config=" ArtifactResolutionRequest { scope: session, ref: soft } ModelBuildRequest { scope: request, ref: soft } ModelBuilderRequest VersionRangeRequest { ref: hard } ModelBuildRequest * { ref: hard } "
# Base configuration for all ModelBuilderRequest # More specific selectors can override individual properties mvn clean install -Dmaven.cache.config=" ModelBuilderRequest { scope: session } * ModelBuilderRequest { ref: hard } ModelBuildRequest ModelBuilderRequest { ref: soft } "
# VersionRangeRequest with ModelBuilderRequest parent uses hard references mvn clean install -Dmaven.cache.config="ModelBuilderRequest VersionRangeRequest { ref: hard }" # Any request with ModelBuildRequest parent uses hard references mvn clean install -Dmaven.cache.config="ModelBuildRequest * { ref: hard }"
Selectors are ordered by specificity (most specific first):
ModelBuildRequest ModelBuilderRequest)ModelBuilderRequest)* ModelBuilderRequest)Example:
ModelBuilderRequest { scope: session } # Base: sets scope
* ModelBuilderRequest { ref: hard } # Adds ref type
ModelBuildRequest ModelBuilderRequest { ref: soft } # Overrides ref for specific parent
For a ModelBuilderRequest with ModelBuildRequest parent:
scope: session, ref: softPotential future improvements: