OpenAPITools/openapi-generator · error · MojoExecutionException
Invalid mergeConflictStrategy value '${mergeConflictStrategy
Error message
Invalid mergeConflictStrategy value '${mergeConflictStrategy}'. Valid values are: WARN, FAIL What it means
Thrown by CodeGenMojo.execute when mergeMode is DEEP and MergedSpecBuilder.MergeConflictStrategy.valueOf(mergeConflictStrategy.toUpperCase(Locale.ROOT)) throws IllegalArgumentException — the configured <mergeConflictStrategy> is not WARN or FAIL (case-insensitive, not trimmed). The conflict strategy is only resolved in DEEP mode, so an invalid value passes silently in REF mode and fails here only after a valid DEEP mergeMode.
Source
Thrown at modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java:645
}
MergedSpecBuilder.MergeMode resolvedMergeMode;
try {
resolvedMergeMode = MergedSpecBuilder.MergeMode.valueOf(mergeMode.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) {
throw new MojoExecutionException("Invalid mergeMode value '" + mergeMode
+ "'. Valid values are: REF, DEEP");
}
MergedSpecBuilder builder = new MergedSpecBuilder(inputSpecFiles, mergedFileOutputDir.getAbsolutePath(),
mergedFileName, mergedFileInfoName, mergedFileInfoDescription, mergedFileInfoVersion, auth)
.withMergeMode(resolvedMergeMode);
if (resolvedMergeMode == MergedSpecBuilder.MergeMode.DEEP) {
try {
builder.withConflictStrategy(
MergedSpecBuilder.MergeConflictStrategy.valueOf(mergeConflictStrategy.toUpperCase(Locale.ROOT)));
} catch (IllegalArgumentException e) {
throw new MojoExecutionException("Invalid mergeConflictStrategy value '" + mergeConflictStrategy
+ "'. Valid values are: WARN, FAIL");
}
}
inputSpec = builder.buildMergedSpec();
LOGGER.info("Merged input spec from explicit file list: {}", inputSpec);
} else if (StringUtils.isNotBlank(inputSpecRootDirectory)) {
// make sure the path can be processed correct under Windows OS
inputSpecRootDirectory = inputSpecRootDirectory.replaceAll("\\\\", "/");
MergedSpecBuilder.MergeMode resolvedMergeMode;
try {
resolvedMergeMode = MergedSpecBuilder.MergeMode.valueOf(mergeMode.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) {
throw new MojoExecutionException("Invalid mergeMode value '" + mergeMode
+ "'. Valid values are: REF, DEEP");
}
View on GitHub (pinned to fcec517be3)
Solutions
- Set <mergeConflictStrategy>WARN</mergeConflictStrategy> or <mergeConflictStrategy>FAIL</mergeConflictStrategy> (casing is normalized, whitespace is not).
- Remember this property is only validated when <mergeMode>DEEP</mergeMode> — a bad value hides in REF mode, so fix it now to avoid a later failure.
- Remove whitespace/newlines inside the element if the value already looks correct.
Example fix
<!-- before --> <mergeMode>DEEP</mergeMode> <mergeConflictStrategy>OVERWRITE</mergeConflictStrategy> <!-- after --> <mergeMode>DEEP</mergeMode> <mergeConflictStrategy>FAIL</mergeConflictStrategy>
Defensive patterns
Strategy: validation
Validate before calling
# pre-check mergeConflictStrategy when mergeMode=DEEP
if [ "$MODE" = "DEEP" ]; then
CS=$(mvn -q help:evaluate -Dexpression=mergeConflictStrategy -DforceStdout 2>/dev/null)
echo "$CS" | tr '[:lower:]' '[:upper:]' | grep -qx '\(WARN\|FAIL\)' || { echo "invalid mergeConflictStrategy: $CS"; exit 1; }
fi Prevention
- Only two conflict strategies exist: WARN and FAIL — pick one explicitly whenever using DEEP merge.
- An invalid value is invisible under REF mode; validate it anyway so switching to DEEP later cannot break the build.
- Centralize mergeConflictStrategy next to mergeMode in one configuration block.
When it happens
Trigger: Configuring <mergeMode>DEEP</mergeMode> together with <mergeConflictStrategy>OVERWRITE</mergeConflictStrategy>, <mergeConflictStrategy>fail_on_conflict</mergeConflictStrategy>, or a value with stray whitespace, while also using <inputSpecFiles>. With mergeMode REF the branch is skipped and the bad value is never checked.
Common situations: Switching from REF to DEEP merging to get conflict detection and guessing at strategy names; sharing POM snippets across teams where one side used a newer/older vocabulary; IDE autocompleting a similarly named property from a different plugin.
Related errors
- Invalid mergeMode value '${mergeMode}'. Valid values are: RE
- Invalid mergeMode value '" + mergeMode + "'. Valid values ar
- Invalid mergeConflictStrategy value '" + mergeConflictStrate
- mergedFileOutputDir must be set when inputSpecFiles is used
- mergedFileOutputDir must be set when inputSpecFiles is used
AI-assisted analysis of OpenAPITools/openapi-generator@fcec517be3 (2026-08-22).
Data as JSON: /api/errors/e19473f824c73f9d.
Report an issue: GitHub.