quarkusio/quarkus · warning · RuntimeException
Failed to generate the capability error report out of confli
Error message
Failed to generate the capability error report out of conflicts ${conflicts} and unsatisfied ${missing} What it means
CapabilityErrors.report() writes the conflict and missing-capability problem report into a StringWriter; if that buffered writing throws IOException, it is wrapped in a RuntimeException describing the conflicts and unsatisfied sets. This indicates a failure formatting the capability error report, not the capability problem itself.
Source
Thrown at independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/CapabilityErrors.java:35
public void addConflict(String capability, String provider) {
conflicts.computeIfAbsent(capability, k -> new ArrayList<>()).add(provider);
}
public void addMissing(String capability, String consumer) {
missing.computeIfAbsent(capability, k -> new ArrayList<>()).add(consumer);
}
public boolean isEmpty() {
return conflicts.isEmpty() && missing.isEmpty();
}
public String report() {
final StringWriter sw = new StringWriter();
try (BufferedWriter writer = new BufferedWriter(sw)) {
reportProblems(conflicts, false, writer);
reportProblems(missing, true, writer);
} catch (IOException e) {
throw new RuntimeException("Failed to generate the capability error report out of conflicts " + conflicts
+ " and unsatisfied " + missing, e);
}
return sw.getBuffer().toString();
}
private static void reportProblems(Map<String, List<String>> problems, boolean missing, BufferedWriter writer)
throws IOException {
if (problems.isEmpty()) {
return;
}
if (missing) {
writer.write(
"The following capability requirements aren't satisfied by the Quarkus extensions present on the classpath:");
} else {
writer.write("Please make sure there is only one provider of the following capabilities:");
}
// To have a consistent report over multiple builds, the capabilities and providers are ordered alphabetically
final List<String> capabilities = new ArrayList<>(problems.size());View on GitHub (pinned to e1c734241f)
Solutions
- Inspect the cause exception chained in the RuntimeException.
- Re-run the application build to regenerate the capability error report.
- If reproducible, replace the report generation or upgrade Quarkus — this is a framework-level bug.
Example fix
// before
String report = capabilityErrors.report(); // wrapped RuntimeException
// after
String report;
try {
report = capabilityErrors.report();
} catch (RuntimeException e) {
LOG.errorf(e, "Capability conflicts=%s missing=%s", conflicts, missing);
throw e;
} Defensive patterns
Strategy: try-catch
Try / catch
try {
return capabilityErrors.report();
} catch (RuntimeException e) {
LOG.errorf(e, "Capability report generation failed (conflicts=%s, missing=%s)", conflicts, missing);
return "conflicts=" + conflicts + "; missing=" + missing; // raw fallback
} Prevention
- Treat this as a framework bug and inspect the chained cause.
- Upgrade Quarkus if reproducible.
- Log raw conflicts/missing sets so capability issues remain diagnosable.
When it happens
Trigger: report() called from aggregateCapabilities/conflict or missing-capability validation when BufferedWriter/StringWriter operations raise IOException — practically only an unexpected low-level I/O failure.
Common situations: Extremely rare in practice since StringWriter never throws IOException normally; can appear if the method is overridden/subclassed, or during resource exhaustion (OutOfMemory-like conditions).
Related errors
- Failed to open path tree with root %s
- Failed to read %s
- Failed to read resources from classpath
- Failed to create output directory for generated sources: %s
- Error reading stream.
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/65d068c1a28645fc.
Report an issue: GitHub.