{"record":{"id":"7c409f53bbd76c6a","repo":"OpenAPITools/openapi-generator","slug":"invalid-mergemode-value-mergemode-valid-valu","errorCode":null,"errorMessage":"Invalid mergeMode value '${mergeMode}'. Valid values are: REF, DEEP","messagePattern":"Invalid mergeMode value '(.+?)'\\. Valid values are: REF, DEEP","errorType":"exception","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java","lineNumber":632,"sourceCode":"    @Parameter(readonly = true, required = true, defaultValue = \"${project}\")\n    private MavenProject project;\n\n    @Override\n    public void execute() throws MojoExecutionException {\n        if (StringUtils.isBlank(inputSpec) && StringUtils.isBlank(inputSpecRootDirectory) && (inputSpecFiles == null || inputSpecFiles.isEmpty())) {\n            LOGGER.error(\"inputSpec, inputSpecRootDirectory, or inputSpecFiles must be specified\");\n            throw new MojoExecutionException(\"inputSpec, inputSpecRootDirectory, or inputSpecFiles must be specified\");\n        }\n\n        if (inputSpecFiles != null && !inputSpecFiles.isEmpty()) {\n            if (mergedFileOutputDir == null) {\n                throw new MojoExecutionException(\"mergedFileOutputDir must be set when inputSpecFiles is used\");\n            }\n            MergedSpecBuilder.MergeMode resolvedMergeMode;\n            try {\n                resolvedMergeMode = MergedSpecBuilder.MergeMode.valueOf(mergeMode.toUpperCase(Locale.ROOT));\n            } catch (IllegalArgumentException e) {\n                throw new MojoExecutionException(\"Invalid mergeMode value '\" + mergeMode\n                        + \"'. Valid values are: REF, DEEP\");\n            }\n\n            MergedSpecBuilder builder = new MergedSpecBuilder(inputSpecFiles, mergedFileOutputDir.getAbsolutePath(),\n                    mergedFileName, mergedFileInfoName, mergedFileInfoDescription, mergedFileInfoVersion, auth)\n                    .withMergeMode(resolvedMergeMode);\n\n            if (resolvedMergeMode == MergedSpecBuilder.MergeMode.DEEP) {\n                try {\n                    builder.withConflictStrategy(\n                            MergedSpecBuilder.MergeConflictStrategy.valueOf(mergeConflictStrategy.toUpperCase(Locale.ROOT)));\n                } catch (IllegalArgumentException e) {\n                    throw new MojoExecutionException(\"Invalid mergeConflictStrategy value '\" + mergeConflictStrategy\n                            + \"'. Valid values are: WARN, FAIL\");\n                }\n            }\n\n            inputSpec = builder.buildMergedSpec();","sourceCodeStart":614,"sourceCodeEnd":650,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java#L614-L650","documentation":"Thrown by CodeGenMojo.execute when <inputSpecFiles> is used and MergedSpecBuilder.MergeMode.valueOf(mergeMode.toUpperCase(Locale.ROOT)) throws IllegalArgumentException — i.e. the configured mergeMode is not one of REF or DEEP (case-insensitive). The value is uppercased but not trimmed, so stray whitespace also fails. The catch converts it to a MojoExecutionException naming the valid values.","triggerScenarios":"Setting <mergeMode>reference</mergeMode>, <mergeMode>deep_merge</mergeMode>, or <mergeMode> REF</mergeMode> (leading space) in the generate goal while using inputSpecFiles. A null mergeMode raises NullPointerException instead, so this specific message implies a non-null but unrecognized string.","commonSituations":"Copying mergeMode vocabulary from swagger-maven-plugin or other tools whose mode names differ; hand-editing the POM and introducing whitespace or a typo; documentation version drift where valid mode names changed between plugin releases.","solutions":["Set <mergeMode>REF</ref> or <mergeMode>DEEP</mergeMode> (any casing works because the code uppercases it).","Remove surrounding whitespace/newlines from the element value — the code does not trim.","If you do not need merging behavior control, remove <mergeMode> entirely so the plugin default applies."],"exampleFix":"<!-- before -->\n<mergeMode>ref_merge</mergeMode>\n\n<!-- after -->\n<mergeMode>REF</mergeMode>","handlingStrategy":"validation","validationCode":"# CI pre-check: mergeMode, when present, must be REF or DEEP (case-insensitive)\nMODE=$(mvn -q help:evaluate -Dexpression=mergeMode -DforceStdout 2>/dev/null)\nif [ -n \"$MODE\" ] && ! echo \"$MODE\" | tr '[:lower:]' '[:upper:]' | grep -qx '\\(REF\\|DEEP\\)'; then\n  echo \"invalid mergeMode: $MODE\"; exit 1\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin mergeMode to REF or DEEP in a shared parent POM; only override with those two values.","Remember the lookup uppercases but does not trim — keep the element value on one line with no padding.","Add a POM-lint step asserting enum-valued properties match the documented sets."],"tags":["openapi-generator","maven","plugin-config","spec-merging","invalid-enum-value"],"backgroundTag":"invalid-config-value","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}