OpenAPITools/openapi-generator · error · MojoExecutionException

Invalid mergeConflictStrategy value '" + mergeConflictStrate

Error message

Invalid mergeConflictStrategy value '" + mergeConflictStrategy + "'. Valid values are: WARN, FAIL

What it means

Thrown in ValidateMojo.mergeInDirectory's file-list branch when mergeMode resolved to DEEP and MergeConflictStrategy.valueOf(mergeConflictStrategy.toUpperCase(Locale.ROOT)) throws IllegalArgumentException — the <mergeConflictStrategy> is neither WARN nor FAIL (case-insensitive, untrimmed). Consistent with the generate goal, the strategy is only validated when deep merging is active.

Source

Thrown at modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/ValidateMojo.java:303

      }
      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");
        }
      }

      String mergedSpec = builder.buildMergedSpec();
      LOGGER.info("Merged input spec from explicit file list: {}", mergedSpec);
      return Optional.of(mergedSpec);
    }

    // Directory scan mode
    Optional<String> mergedSpec = Optional.empty();
    if (StringUtils.isNotBlank(inputSpecRootDirectory)) {
      inputSpecRootDirectory = replaceBackslashesToSlashes(inputSpecRootDirectory);

      MergedSpecBuilder.MergeMode resolvedMergeMode;
      try {
        resolvedMergeMode = MergedSpecBuilder.MergeMode.valueOf(mergeMode.toUpperCase(Locale.ROOT));
      } catch (IllegalArgumentException e) {

View on GitHub (pinned to fcec517be3)

Solutions

  1. Set <mergeConflictStrategy>WARN</mergeConflictStrategy> or <mergeConflictStrategy>FAIL</mergeConflictStrategy>.
  2. Trim whitespace from the value; the lookup uppercases but does not trim.
  3. Share the merge settings with the generate goal via plugin-level <configuration> to keep both consistent.

Example fix

<!-- before -->
<mergeMode>DEEP</mergeMode>
<mergeConflictStrategy>THROW</mergeConflictStrategy>

<!-- after -->
<mergeMode>DEEP</mergeMode>
<mergeConflictStrategy>FAIL</mergeConflictStrategy>
Defensive patterns

Strategy: validation

Validate before calling

CS=$(mvn -q help:evaluate -Dexpression=mergeConflictStrategy -DforceStdout 2>/dev/null)
echo "$CS" | tr -d '[:space:]' | tr '[:lower:]' '[:upper:]' | grep -qx '\(WARN\|FAIL\)' || {
  echo "mergeConflictStrategy must be WARN or FAIL (got '$CS')"; exit 1;
}

Prevention

When it happens

Trigger: Validate goal with <inputSpecFiles>, <mergeMode>DEEP</mergeMode>, and an invalid conflict strategy such as "THROW", "ignore", or " WARN". The same bad value under REF mode never triggers this error.

Common situations: Enabling deep merge for validation of merged multi-file specs and guessing strategy names; values supplied via -DmergeConflictStrategy=... in pipelines differing from the POM default; whitespace introduced during XML editing.

Related errors


AI-assisted analysis of OpenAPITools/openapi-generator@fcec517be3 (2026-08-22). Data as JSON: /api/errors/798ee73abbdb78dc. Report an issue: GitHub.