{"record":{"id":"24286eea29e511f5","repo":"apache/maven","slug":"unknown-default-reference-type-using-hard","errorCode":null,"errorMessage":"Unknown default reference type, using HARD","messagePattern":"Unknown default reference type, using HARD","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelObjectPool.java","lineNumber":149,"sourceCode":"            } catch (IllegalArgumentException e) {\n                LOGGER.warn(\"Unknown reference type for \" + className + \": \" + perTypeValue + \", using default\");\n            }\n        }\n\n        // Fall back to default reference type\n        return getDefaultReferenceType();\n    }\n\n    /**\n     * Gets the default reference type from system properties.\n     */\n    private Cache.ReferenceType getDefaultReferenceType() {\n        try {\n            String referenceTypeProperty =\n                    getProperty(Constants.MAVEN_MODEL_PROCESSOR_REFERENCE_TYPE, Cache.ReferenceType.HARD.name());\n            return Cache.ReferenceType.valueOf(referenceTypeProperty.toUpperCase());\n        } catch (IllegalArgumentException e) {\n            LOGGER.warn(\"Unknown default reference type, using HARD\");\n            return Cache.ReferenceType.HARD;\n        }\n    }\n\n    /**\n     * Interns an object in the appropriate pool.\n     */\n    private Object internObject(Object object, Cache<PoolKey, Object> cache, Class<?> objectType) {\n        // Update statistics\n        TOTAL_CALLS.computeIfAbsent(objectType, k -> new AtomicLong(0)).incrementAndGet();\n\n        PoolKey key = new PoolKey(object);\n        Object existing = cache.get(key);\n        if (existing != null) {\n            CACHE_HITS.computeIfAbsent(objectType, k -> new AtomicLong(0)).incrementAndGet();\n            return existing;\n        }\n","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelObjectPool.java#L131-L167","documentation":"DefaultModelObjectPool picks the default reference strength for pooled model objects from the system property 'maven.model.processor.referenceType' (Constants.MAVEN_MODEL_PROCESSOR_REFERENCE_TYPE), defaulting to HARD. If the configured string is not a Cache.ReferenceType name (NONE, SOFT, WEAK, HARD), valueOf() throws IllegalArgumentException, this warn is logged, and HARD references are used as a safe fallback.","triggerScenarios":"Launching Maven with -Dmaven.model.processor.referenceType=<invalid> (e.g. 'soft ', 'PHANTOM', 'weakref'). getDefaultReferenceType() is read whenever no valid per-type override exists, so every pooled class uses HARD after the fallback.","commonSituations":"Typos in MAVEN_OPTS/.mvn/jvm.config/CI settings; documentation copied from ehcache or Guava cache tuning (different vocabulary); values with trailing whitespace from YAML or property files, which toUpperCase() does not strip.","solutions":["Use an exact enum name: -Dmaven.model.processor.referenceType=SOFT (NONE, SOFT, WEAK, HARD; any case)","Trim whitespace and remove quotes from the value wherever it is defined (MAVEN_OPTS, jvm.config, CI env var)","Remove the property to accept the documented default HARD"],"exampleFix":"# before\nMAVEN_OPTS=\"-Dmaven.model.processor.referenceType=weakref\"\n\n# after\nMAVEN_OPTS=\"-Dmaven.model.processor.referenceType=WEAK\"","handlingStrategy":"validation","validationCode":"static final Set<String> VALID_REF_TYPES = Set.of(\"NONE\", \"SOFT\", \"WEAK\", \"HARD\");\n\nstatic void checkDefaultRefType(java.util.Properties props) {\n    String v = props.getProperty(\"maven.model.processor.referenceType\");\n    if (v != null && !VALID_REF_TYPES.contains(v.strip().toUpperCase(Locale.ROOT))) {\n        throw new IllegalArgumentException(\"maven.model.processor.referenceType must be one of \" + VALID_REF_TYPES);\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Document the accepted values next to wherever the property is set (jvm.config, CI template)","Add a startup assertion in wrapper scripts that validates all maven.model.processor.* enum-typed properties","Silent fallback to HARD also means silently different memory behavior — fail configuration checks early instead"],"tags":["maven","system-property","object-pool","configuration","memory-tuning"],"backgroundTag":"invalid-config-value","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}