apache/maven · warning
Unknown reference type for {}: {}, using default
Error message
Unknown reference type for {}: {}, using default What it means
Maven 4 interns model objects (Dependency, Plugin, ...) in DefaultModelObjectPool to cut memory use. The reference strength of a pooled class can be tuned per simple class name via the system property 'maven.model.processor.referenceType.<ClassName>'. The value must match a Cache.ReferenceType constant (NONE, SOFT, WEAK, HARD, case-insensitive); valueOf() throws IllegalArgumentException for anything else and this warn is emitted, falling back to the default reference type.
Source
Thrown at impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelObjectPool.java:132
return Cache.newCache(referenceType);
}
/**
* Gets the reference type to use for a specific object type.
* Checks for per-type configuration first, then falls back to default.
*/
private Cache.ReferenceType getReferenceTypeForClass(Class<?> objectType) {
String className = objectType.getSimpleName();
// Check for per-type configuration first
String perTypeProperty = Constants.MAVEN_MODEL_PROCESSOR_REFERENCE_TYPE_PREFIX + className;
String perTypeValue = getProperty(perTypeProperty, null);
if (perTypeValue != null) {
try {
return Cache.ReferenceType.valueOf(perTypeValue.toUpperCase());
} catch (IllegalArgumentException e) {
LOGGER.warn("Unknown reference type for " + className + ": " + perTypeValue + ", using default");
}
}
// Fall back to default reference type
return getDefaultReferenceType();
}
/**
* Gets the default reference type from system properties.
*/
private Cache.ReferenceType getDefaultReferenceType() {
try {
String referenceTypeProperty =
getProperty(Constants.MAVEN_MODEL_PROCESSOR_REFERENCE_TYPE, Cache.ReferenceType.HARD.name());
return Cache.ReferenceType.valueOf(referenceTypeProperty.toUpperCase());
} catch (IllegalArgumentException e) {
LOGGER.warn("Unknown default reference type, using HARD");
return Cache.ReferenceType.HARD;View on GitHub (pinned to e4093d4e12)
Solutions
- Set the property to one of the exact enum names NONE, SOFT, WEAK or HARD (any case): -Dmaven.model.processor.referenceType.Dependency=SOFT
- Remove surrounding whitespace/quotes from the value in MAVEN_OPTS, .mvn/jvm.config or the CI variable
- Delete the per-type property entirely and rely on the global 'maven.model.processor.referenceType' if per-class tuning was not intended
Example fix
# before export MAVEN_OPTS="$MAVEN_OPTS -Dmaven.model.processor.referenceType.Dependency=softish" # after export MAVEN_OPTS="$MAVEN_OPTS -Dmaven.model.processor.referenceType.Dependency=SOFT"
Defensive patterns
Strategy: validation
Validate before calling
// before launching Maven / setting the system property
static final Set<String> VALID_REF_TYPES = Set.of("NONE", "SOFT", "WEAK", "HARD");
static boolean isValidRefType(String value) {
return value != null && VALID_REF_TYPES.contains(value.strip().toUpperCase(Locale.ROOT));
}
// guard
String v = System.getProperty("maven.model.processor.referenceType.Dependency");
if (v != null && !isValidRefType(v)) {
throw new IllegalArgumentException("Fix maven.model.processor.referenceType.Dependency: " + v);
} Prevention
- Treat reference-type tuning as an enum, not free text: validate NONE/SOFT/WEAK/HARD in the script that sets MAVEN_OPTS
- Always strip() values read from env files or CI variables before passing them as -D properties
- Prefer setting only the global maven.model.processor.referenceType unless per-class tuning is measured to matter
When it happens
Trigger: Starting Maven (or an embedded Maven instance) with -Dmaven.model.processor.referenceType.Dependency=<bad>, where <bad> is not NONE/SOFT/WEAK/HARD (e.g. 'softish', 'STRONG', or a value with leading/trailing whitespace, since it is never trimmed). getReferenceTypeForClass() is consulted on every internObject() call for that class, so the warn repeats.
Common situations: Typos in MAVEN_OPTS or CI environment variables; copy-pasting tuning advice written for a different library; values quoted with stray spaces (' SOFT '); expecting PascalCase names that do not exist (e.g. 'WEAK_REFERENCE').
Related errors
- Unknown default reference type, using HARD
- Ranges overlap: {}
- Only fully-qualified sets allowed in multiple set scenario:
- Single version must be surrounded by []: {}
- Range defies version ordering: {}
AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21).
Data as JSON: /api/errors/f8c4c6821fa29c8a.
Report an issue: GitHub.