{"record":{"id":"f8c4c6821fa29c8a","repo":"apache/maven","slug":"unknown-reference-type-for-using-default","errorCode":null,"errorMessage":"Unknown reference type for {}: {}, using default","messagePattern":"Unknown reference type for (.+?): (.+?), using default","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelObjectPool.java","lineNumber":132,"sourceCode":"        return Cache.newCache(referenceType);\n    }\n\n    /**\n     * Gets the reference type to use for a specific object type.\n     * Checks for per-type configuration first, then falls back to default.\n     */\n    private Cache.ReferenceType getReferenceTypeForClass(Class<?> objectType) {\n        String className = objectType.getSimpleName();\n\n        // Check for per-type configuration first\n        String perTypeProperty = Constants.MAVEN_MODEL_PROCESSOR_REFERENCE_TYPE_PREFIX + className;\n        String perTypeValue = getProperty(perTypeProperty, null);\n\n        if (perTypeValue != null) {\n            try {\n                return Cache.ReferenceType.valueOf(perTypeValue.toUpperCase());\n            } 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;","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelObjectPool.java#L114-L150","documentation":"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.","triggerScenarios":"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.","commonSituations":"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').","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"],"exampleFix":"# before\nexport MAVEN_OPTS=\"$MAVEN_OPTS -Dmaven.model.processor.referenceType.Dependency=softish\"\n\n# after\nexport MAVEN_OPTS=\"$MAVEN_OPTS -Dmaven.model.processor.referenceType.Dependency=SOFT\"","handlingStrategy":"validation","validationCode":"// before launching Maven / setting the system property\nstatic final Set<String> VALID_REF_TYPES = Set.of(\"NONE\", \"SOFT\", \"WEAK\", \"HARD\");\n\nstatic boolean isValidRefType(String value) {\n    return value != null && VALID_REF_TYPES.contains(value.strip().toUpperCase(Locale.ROOT));\n}\n\n// guard\nString v = System.getProperty(\"maven.model.processor.referenceType.Dependency\");\nif (v != null && !isValidRefType(v)) {\n    throw new IllegalArgumentException(\"Fix maven.model.processor.referenceType.Dependency: \" + v);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"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"}